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 代表的就是 当前订阅的用户)

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

  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/7742873.html
Copyright © 2011-2022 走看看