大纲
什么是发布订阅
发布订阅是一种消息传送方式;发布者会将不同的类别(主题)消息发送给消息中间件(broker),由消息中间件投递消息给订阅者.
涉及主体: 消息发送者(发布者publisher); 消息接收者(订阅者subscribe); 中间的消息代理(broker)
优点: 发布者与订阅者解耦,不需要知道对方的存在即可进行消息传递
缺点: 对中间的消息代理依赖较强, 要考虑好消息交付,中间件可用性问题
简单发布订阅
简单发布订阅功能跟市面上常用mq(kafka、RabbitMQ、ActiveMQ, RocketMQ)相比,相对轻量,针对数据准确和安全性要求没有那么高可以直接使用,适用于中小项目后台管理系统等
简单发布订阅适用场景:
redis实现发布订阅
通过 publish 命令发送给频道 channel1
Redis 的 subscribe 命令可以让客户端订阅任意数量的频道(channel1), 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端
频道 channel1: 消息中间件redis临时存储消息的地方
客户端: 指各种编程语言编写的应用程序客户端(消息订阅者)
编码实现:
//1 引入spring-data-redis 依赖
//2 监听页面服务配置变动
@Component
public class ConfigChangedRedisListener extends MessageListenerAdapter {
@Override
public void onMessage(Message message, byte[] pattern) {
JSONObject msg = JSON.parseObject(new String(message.getBody()));
}
}
//3 redis 消息监听容器
@Configuration
public class RedisConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Autowired
private ConfigChangedRedisListener configChangedRedisListener;
public static String TOPIC_CONFIG_CHANGED = "topicConfigChanged";
@Bean
RedisMessageListenerContainer 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博客
| 留言与评论(共有 0 条评论) “” |