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

大纲

  • 什么是发布订阅
  • 简单发布订阅
  • 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容器配置 RedisMessageListenerContainer
  • 4 stringRedisTemplate 发布消息到频道
//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博客

简单   java   redis
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章