redis 消息队列发布订阅模式spring boot实现

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

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

       不多说 直接上代码



/**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);
    }
}

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

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

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


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



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

下一篇我会介绍 我现在的应用场景,从redis 收到消息之后 通过websocke 通知到前端浏览器

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Spring Boot中,你可以使用Redis作为消息队列实现消息的发布和订阅。下面是一个简单的示例,演示如何在Spring Boot中监听Redis消息队列: 首先,确保你的Spring Boot项目中已经配置了Redis的依赖。 创建一个消息监听器类,实现`MessageListener`接口,例如: ```java @Component public class RedisMessageListener implements MessageListener { @Override public void onMessage(Message message, byte[] pattern) { String channel = new String(message.getChannel()); String body = new String(message.getBody()); System.out.println("Received message: " + body + " from channel: " + channel); // 处理接收到的消息 } } ``` 接下来,创建一个配置类,配置Redis连接和消息监听器,例如: ```java @Configuration public class RedisConfig { @Bean JedisConnectionFactory jedisConnectionFactory() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName("localhost"); configuration.setPort(6379); return new JedisConnectionFactory(configuration); } @Bean RedisMessageListenerContainer redisContainer() { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(jedisConnectionFactory()); container.addMessageListener(redisMessageListener(), new ChannelTopic("your-channel-name")); return container; } @Bean MessageListenerAdapter redisMessageListener() { return new MessageListenerAdapter(new RedisMessageListener()); } } ``` 在上面的配置中,你需要替换`localhost`和`6379`为你的Redis服务器的主机名和端口号,以及`your-channel-name`为你想要监听的Redis频道名称。 最后,启动你的Spring Boot应用程序,当有消息发布到Redis的指定频道时,`RedisMessageListener`中的`onMessage`方法将会被调用,你可以在其中处理接收到的消息。 希望以上信息能帮助到你!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值