zoukankan      html  css  js  c++  java
  • 【转】redis 消息队列发布订阅模式spring boot实现

     最近做项目的时候写到一个事件推送的场景。之前的实现方式是起job一直查询数据库,看看有没有最新的消息。这种方式非常的不优雅,反正我是不能忍,由于羡慕本身就依赖redis,刚好redis 也有消息队列的功能,就简单的使用redis 来实现这个消息推送。

    之前参考网上的例子,发现全部来自一个地方,spring 官方的一个例子,某些打着“非官方例子”的头号,还是一样就复制了一下官方的例子,怕是自己都没搞懂代码,原封不动的贴上来了,这边顺便提一句国内多数的博客都是相互“借鉴”,有些自己都没理解就把别人的内容 ctrl c  ctrl v 过来了。这边我不贴官方的代码,点这里传送 官方的例子。顺便提一句。CountDownLatch 对象其实跟这个内容是无关的,这点我要提一下,具体功能我不多说,官方例子 是为了让程序发送到 redis 通道里面的 消息被程序读取之后 才结束程序 而引入的类。

           不多说 直接上代码

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
    /**redis 消息处理器*/
    @Component
    public class MessageReceiver {
     
    /**接收消息的方法*/
    public void receiveMessage(String message){
    System.out.println(message);
    }
     
    }
     
     
    @Configuration
    public class RedisConfig {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
    MessageListenerAdapter listenerAdapter) {
     
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    //订阅了一个叫chat 的通道
    container.addMessageListener(listenerAdapter, new PatternTopic("chat"));
    //这个container 可以添加多个 messageListener
    return container;
    }
     
    @Bean
    MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
    //这个地方 是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage”
    //也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看
    return new MessageListenerAdapter(receiver, "receiveMessage");
    }
     
    /**redis 读取内容的template 这边跟本工程无关,可以不配置*/
    @Bean
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
    return new StringRedisTemplate(connectionFactory);
    }
    }
     来自CODE的代码片
    redisConfig.java

    上面 我把两个类写在了一起,第一个类 messageReceiver 注释上也有说明,里面只有一个方法,就是接收到消息之后 处理,这边演示我就简单的将他打印在控制台上。

    第二个类就是一些配置,注释上我想也应该能看明白。

    ok 接下里就是启动程序 看看效果

        ok 我用命令 publish 向 chat 通道推送了 helloword (提一下 integer 1 代表的就是 当前订阅的用户)

        完美在我程序里面也收到这个消息,并且打印在控制台上。

  • 相关阅读:
    Linux性能及调优指南(翻译)之Linux内存架构
    dtrace4linux
    perlchina2016 大会
    GO 语言圣经 -在线阅读
    dtrace4linux_Example
    hellogcc -100GDB技巧
    ITGEGE在线教育
    编译系统透视:图解编译原理
    C 高级编程5 IO与文件权限
    C 高级编程4 makefile 与 IO
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/7742873.html
Copyright © 2011-2022 走看看