前言:
现在朋友们对“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 消息订阅发布框架