当前位置:   article > 正文

(Redis使用系列) Springboot 实现Redis消息的订阅与分布 四_redismessagelistenercontainer已经注册成功,要如何才能订阅redis的消

redismessagelistenercontainer已经注册成功,要如何才能订阅redis的消息

(建议初学者把这个系列前面的都看看,那对于redis的基本使用操作及一些消息的订阅分布都是没问题的了)

Redis,一个缓存数据库。不仅仅是能用于对数据的CRUD,也可以作为一个消息中间件,用来进行消息的分发和订阅。

话不多说,我们直接进入代码part:

使用springboot去实现Redis的消息订阅与发布,前提是你的项目已经能正常连接上redis了,这里就不做连接介绍了(不清楚的可以去看这个系列的前面几篇)。

 

消息推送:

建一个controller,

  1. @Autowired
  2. private StringRedisTemplate stringRedisTemplate;
  1. @GetMapping("sendRedisMessageTest")
  2. public String SendRedisMessage() {
  3. System.out.println("Sending message...");
  4. //第一个参数是,消息推送的主题名称;第二个参数是,要推送的消息信息
  5. //"chat"->主题
  6. //"我是一条消息"->要推送的消息
  7. stringRedisTemplate.convertAndSend("chat", "我是一条消息");
  8. return "Send Success" ;
  9. }

 没错,到这里,使用redis作为中间件,推送消息到主题“chat” ,已经完成了!

怎么知道是不是推成功了?

我们接着写代码,实现redis消息的订阅来验证下!

 消息订阅:

既然是消息的订阅,那肯定是一个监听者的形式了,无时无刻他都在等待有没有收到消息,而消息,来自于某个主题。

先建一个消息监听,然后配置下,(代码里面的Receiver是消息接收类,在下面有代码。)

 RedisMessageListener.java :

  1. /**
  2. * @Author : JCccc
  3. * @CreateTime : 2019-1-2
  4. * @Description :
  5. * @Point: Keep a good mood
  6. **/
  7. @Configuration
  8. public class RedisMessageListener {
  9. /**
  10. * redis消息监听器容器
  11. * 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器
  12. * 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理
  13. * @param connectionFactory
  14. * @param listenerAdapter
  15. * @return
  16. */
  17. @Bean
  18. RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
  19. MessageListenerAdapter listenerAdapter) {
  20. RedisMessageListenerContainer container = new RedisMessageListenerContainer();
  21. container.setConnectionFactory(connectionFactory);
  22. //订阅了一个叫chat 的通道
  23. container.addMessageListener(listenerAdapter, new PatternTopic("chat"));
  24. //这个container 可以添加多个 messageListener
  25. //container.addMessageListener(listenerAdapter, new PatternTopic("这里是监听的通道的名字"));
  26. return container;
  27. }
  28. /**
  29. * 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法
  30. * @param receiver
  31. * @return
  32. */
  33. @Bean
  34. MessageListenerAdapter listenerAdapter(Receiver receiver) {
  35. //这个地方 是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage”
  36. //也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看
  37. //receiveMessage就是对应消费者那边的消费方法吗,而Receiver是自己弄的一个消费者类
  38. return new MessageListenerAdapter(receiver, "receiveMessage");
  39. }
  40. }

显然,不需要再做解释,因为注释非常详细了。

继续,写一个消息接收类,

Receiver.java

  1. /**
  2. * @Author : JCccc
  3. * @CreateTime : 2019-1-2
  4. * @Description :
  5. * @Point: Keep a good mood
  6. **/
  7. /**
  8. * redis消息处理器
  9. */
  10. @Component
  11. public class Receiver {
  12. private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);
  13. /**
  14. * 接收到消息的方法,message就是指从主题获取的消息,主题配置在RedisMessageListener配置类做配置
  15. * @param message
  16. */
  17. public void receiveMessage(String message) {
  18. TestService testService=new TestService();
  19. //testService.getData();
  20. LOGGER.info("Received <" + message + ">");
  21. }
  22. }

OK,运行一下项目,看看效果:

用postman调用下发布消息的接口,

 

 再看看控制台的反应:

收到了。

好了,本次介绍到此结束。

PS: redis的消息订阅和发布可以结合定时器、异步线程、AOP日志记录等等可扩展的,本文只是纯介绍redis的消息订阅和发布的使用。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/754544
推荐阅读
相关标签
  

闽ICP备14008679号