在两个java项目中实现Redis的发布订阅模式

如何在两个java项目中实现Redis的发布订阅模式?

    • 1. Redis简介
    • 2. 发布订阅模式介绍
    • 3. 实现思路
    • 4. 代码实现及详细解释
      • 4.1. RedisUtil
      • 4.2. Publisher
      • 4.3. Subscriber
      • 4.4. 运行程序

目录:

  1. Redis简介
  2. 发布订阅模式介绍
  3. 实现思路
  4. 代码实现及详细解释

1. Redis简介

Redis是一种高性能的键值存储系统,常用于缓存、分布式会话和实时分析等场景。它支持多种数据结构(如字符串、哈希、列表、集合和有序集合),同时具备高速读写和持久化功能。

2. 发布订阅模式介绍

Redis的发布订阅模式是其提供的一种通信模式,在这种模式下,消息发布者将消息发送到一个频道,所有订阅该频道的订阅者都会收到这个消息。发布者和订阅者之间通过频道进行信息传递,可以实现解耦和异步处理。

3. 实现思路

要在两个Java项目中实现Redis的发布订阅模式,需要使用Redis的Java客户端,如jedis或lettuce。下面是一种通用的实现思路:

  1. 引入Redis的Java客户端依赖:
    在两个项目的pom.xml文件中,引入Redis的Java客户端依赖,如jedis或lettuce。可以通过Maven或Gradle等构建工具来管理依赖关系。

  2. 初始化Redis连接:
    在每个Java项目中,创建一个RedisUtil类来管理Redis连接。在该类中,可以通过配置文件或硬编码的方式,初始化Redis连接池,并提供获取和释放连接的方法。

  3. 实现发布者:
    在发布者项目中,创建一个Publisher类,通过RedisUtil获取Redis连接,并使用发布方法将消息发送到指定频道。在频道上发布消息时,可以将消息序列化为字符串或其他形式进行传输。

  4. 实现订阅者:
    在订阅者项目中,创建一个Subscriber类,通过RedisUtil获取Redis连接,并注册一个监听器来监听指定频道上的消息。当有消息发布到频道上时,监听器会调用相应的处理逻辑。

4. 代码实现及详细解释

4.1. RedisUtil

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** @author linx 2023-10-24 20:50*/
public class RedisUtil {private static JedisPool jedisPool;// 初始化Redis连接public static void initRedisPool() {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(100);config.setMaxIdle(20);config.setMaxWaitMillis(10000);config.setTestOnBorrow(true);jedisPool = new JedisPool(config, "redis-server", 6379);}// 获取Redis连接public static Jedis getJedis() {if (jedisPool == null) {initRedisPool();}return jedisPool.getResource();}// 释放Redis连接public static void releaseJedis(Jedis jedis) {if (jedis != null) {jedis.close();}}public static void set(String key, String value, int expireSeconds) {Jedis jedis = null;try {jedis = getJedis();jedis.set(key, value);if (expireSeconds > 0) {jedis.expire(key, expireSeconds);}} finally {releaseJedis(jedis);}}public static String get(String key) {Jedis jedis = null;try {jedis = getJedis();return jedis.get(key);} finally {releaseJedis(jedis);}}public static void delete(String key) {Jedis jedis = null;try {jedis = getJedis();jedis.del(key);} finally {releaseJedis(jedis);}}public static Boolean exists(String key) {Jedis jedis = null;try {jedis = getJedis();return jedis.exists(key);} finally {releaseJedis(jedis);}}public static void publish(String channel, String content) {Jedis jedis = null;try {jedis = getJedis();jedis.publish(channel, content);} finally {releaseJedis(jedis);}}public static void main(String[] args){RedisUtil.publish("TESTCHANNEL:001","你好啊");}
}

上述代码中,我们使用了jedis作为Redis的Java客户端。在RedisUtil中,初始化了一个Redis连接池,并提供获取和释放连接的方法。

4.2. Publisher

import redis.clients.jedis.Jedis;public class Publisher {public static void main(String[] args) {Jedis jedis = RedisUtil.getJedis();jedis.publish("channel", "Hello, Redis!");RedisUtil.releaseJedis(jedis);}
}

上述代码中,我们通过RedisUtil获取一个Redis连接,并使用publish方法将消息发送到名为"channel"的频道上。

4.3. Subscriber

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;/*** @author linx 2023-11-24 4:06*/
public class Subscriber extends JedisPubSub {@Overridepublic void onMessage(String channel, String message) {System.out.println("Received message: " + message);}public static void main(String[] args) {Jedis jedis = RedisUtil.getJedis();Subscriber subscriber = new Subscriber();jedis.subscribe(subscriber, "TESTCHANNEL:001");RedisUtil.releaseJedis(jedis);}
}

上述代码中,我们创建了一个继承自JedisPubSub的Subscriber类,并重写了onMessage方法来处理接收到的消息。然后,我们通过RedisUtil获取一个Redis连接,并使用subscribe方法注册一个监听器,来监听名为"channel"的频道上的消息。

4.4. 运行程序

在这里插入图片描述

在Publisher项目中运行Publisher类,它会向名为"channel"的频道发布一条消息"你好啊"。然后,在Subscriber项目中运行Subscriber类,它会监听"channel"频道上的消息,并在接收到消息时打印出来。

至此,我们已经完成了在两个Java项目中实现Redis的发布订阅模式。

总结:
Redis的发布订阅模式是一种解耦和异步处理的通信模式。通过Redis的Java客户端,我们可以轻松地在多个Java项目中实现该模式。本文通过RedisUtil类对Redis连接进行管理,并通过Publisher和Subscriber类实现了消息的发布和订阅。希望本文对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/212530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3+vite 处理静态资源,解决服务器不显示动态循环img问题

注意: vue2webpack中,通常使用require来动态渲染静态资源。但在vue3vite中,不支持require语法,因此使用require会报undefined,所以官方推荐使用import来动态渲染静态资源。 实现方式动态渲染静态资源 vue2webpack 使…

RabbitMQ 搭建和工作模式

MQ基本概念 1. MQ概述 MQ全称 Message Queue([kjuː])(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。 (队列是一种容器,用于存放数据的都是容器&#xff0…

力扣每日一题-HTML实体解析器-2023.11.23

力扣每日一题:HTML实体解析器 开篇 这是今天的每日一题,中等难度,只要有耐心,应该是能够写出来的。下面给大家分享我的思路与代码。 题目链接: 1410.HTML实体解析器 题目描述 代码思路 1.创建一个哈希表,把要替换的…

二十四、RestClient操作文档

目录 一、新增文档 1、编写测试代码 二、查询文档 1、编写测试代码 三、删除文档 1、编写测试代码 四、修改文档 1、编写测试代码 五、批量导入文档 批量查询 一、新增文档 1、编写测试代码 SpringBootTest public class HotelDocumentTest {private RestHighLevelC…

如何开启MySQL的慢查询日志

说明:如果需要查看某一条SQL查询速度慢,并对慢的SQL进行优化,那么开启MySQL慢查询日志是一定要做的事情,本文介绍如何开启MySQL的慢查询日志; 查看MySQL慢查询是否开启 首先,输入下面的命令,查…

CP_AUTOSAR分层软件架构内容简介

目录 0、前言1、综述1.1 AUTOSAR应用范围及拓展性1.2 架构总体介绍 0、前言 随着汽车功能需求日益增加,稳定安全的AUTOSAR分层软件架构逐渐作为一个热词呈现在汽车电子软件开发领域。那么AUTOSAR分层软件架构到底包括了哪些内容?架构之间的是什么关系&am…

QtCreator9.02不支持JDK11解决

最终效果 使用Android Studio 下载Android SDK Platform 31与Sources for Android 31 下载Android SDK Build Tools 31.0.0 下载NDK 25.1 ,23.1 ,21.3 重要: 下载Android SDK Command-Line Tools ,选择10.0或者9.0其中一个版本 其它版本不支持JDK11 ,本例选择10.0 下载CMak…

Java项目如何打包成Jar(最简单)

最简单的办法,使用Maven插件(idea自带) 1.选择需要打包的mudule,点击idea右侧的maven插件 2.clean操作 3.选择需要的其他mudule,进行install操作(如果有) 4.再次选择需要打包的module&#…

nodejs微信小程序+python+PHP -留学信息查询系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

【论文阅读笔记】Smil: Multimodal learning with severely missing modality

Ma M, Ren J, Zhao L, et al. Smil: Multimodal learning with severely missing modality[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2021, 35(3): 2302-2310.[开源] 本文的核心思想是探讨和解决多模态学习中的一个重要问题:在训练和测…

Electron+VUE3开发简版的编辑器【文件预览】

简版编辑器的功能主要是: 打开对话框,选择文件后台读取文件文件前端展示文件内容。主要技术栈是VUE3、Electron和Nodejs,VUE3做页面交互,Electron提供一个可执行Nodejs的环境以及支撑整个应用的环境,nodeJS负责读取文件内容。 环境配置、安装依赖这些步骤就不再叙述了。 …

SSM家具个性定制管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 家具个性定制管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用…