龙空技术网

java 使用redis 实现简单发布订阅

javabus 256

前言:

现在朋友们对“java 消息订阅发布框架”大体比较关心,大家都想要分析一些“java 消息订阅发布框架”的相关知识。那么小编同时在网摘上收集了一些关于“java 消息订阅发布框架””的相关内容,希望看官们能喜欢,我们一起来了解一下吧!

大纲

什么是发布订阅简单发布订阅redis实现发布订阅zookeeper 实现发布订阅

什么是发布订阅

发布订阅是一种消息传送方式;发布者会将不同的类别(主题)消息发送给消息中间件(broker),由消息中间件投递消息给订阅者.

涉及主体: 消息发送者(发布者publisher); 消息接收者(订阅者subscribe); 中间的消息代理(broker)

优点: 发布者与订阅者解耦,不需要知道对方的存在即可进行消息传递

缺点: 对中间的消息代理依赖较强, 要考虑好消息交付,中间件可用性问题

简单发布订阅

简单发布订阅功能跟市面上常用mq(kafka、RabbitMQ、ActiveMQ, RocketMQ)相比,相对轻量,针对数据准确和安全性要求没有那么高可以直接使用,适用于中小项目后台管理系统等

简单发布订阅适用场景:

多节点部署,数据在运行时可能发生变化,需要通知所有节点更新为最新数据数据量通常比较小,如配置服务

redis实现发布订阅

通过 publish 命令发送给频道 channel1

Redis 的 subscribe 命令可以让客户端订阅任意数量的频道(channel1), 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端

频道 channel1: 消息中间件redis临时存储消息的地方

客户端: 指各种编程语言编写的应用程序客户端(消息订阅者)

编码实现:

1 引入spring-data-redis 依赖2 编写消息监听类MessageListenerAdapter ,重写omessage方法3 定义redis容器配置 RedisMessageListenerContainer4 stringRedisTemplate 发布消息到频道

//1 引入spring-data-redis 依赖//2 监听页面服务配置变动@Componentpublic class ConfigChangedRedisListener extends MessageListenerAdapter {  @Override  public void onMessage(Message message, byte[] pattern) {    JSONObject msg = JSON.parseObject(new String(message.getBody()));  }}//3 redis 消息监听容器  @Configurationpublic class RedisConfig {  @Autowired  private RedisConnectionFactory redisConnectionFactory;  @Autowired  private ConfigChangedRedisListener configChangedRedisListener;  public static String TOPIC_CONFIG_CHANGED = "topicConfigChanged";@BeanRedisMessageListenerContainer messageListenerContainer() {  //redis 消息监听容器,可以添加多个监听不同话题的redis 监听器  RedisMessageListenerContainer container = new RedisMessageListenerContainer();  container.setConnectionFactory(redisConnectionFactory);  container.addMessageListener(configChangedRedisListener, new ChannelTopic(TOPIC_CONFIG_CHANGED));  return container;}}//4 stringRedisTemplate 发布消息到频道public class RedisMsgPublisher {  //发送配置变动消息  public static void configChanged() {    StringRedisTemplate redisTemplate = SpringContextUtils.getBeanByClass(StringRedisTemplate.class);    JSONObject msg = new JSONObject();    msg.put("date", DateUtil.getCurrentTime());    redisTemplate.convertAndSend(RedisConfig.TOPIC_CONFIG_CHANGED, msg.toJSONString());  }}

zookeeper 实现订阅发布

zookeeper的数据发布/订阅,是发布者将数据发布到Zk上的一个或一系列节点上,通过watcher机制,客户端可以监听(订阅)这些数据节点,当这些节点发生变化时,Zookeeper及时地通知客户端,从而达到动态获取数据的目的

watcher机制:znode 存储数据,watch 监听数据改变

数据在zookeeper中存放: 一个配置项/配置文件一个 znode

利用Zookeeper实现一个配置中心编码参考:

Zookeeper 应用场景一、数据发布订阅(配置中心) - 简书

利用Zookeeper实现 - 数据发布订阅_小旋锋的博客-CSDN博客

标签: #java 消息订阅发布框架