【转】redis 消息队列发布订阅模式spring boot实现
2017-10-27 14:00
1866 查看
最近做项目的时候写到一个事件推送的场景。之前的实现方式是起job一直查询数据库,看看有没有最新的消息。这种方式非常的不优雅,反正我是不能忍,由于羡慕本身就依赖redis,刚好redis 也有消息队列的功能,就简单的使用redis 来实现这个消息推送。
之前参考网上的例子,发现全部来自一个地方,spring 官方的一个例子,某些打着“非官方例子”的头号,还是一样就复制了一下官方的例子,怕是自己都没搞懂代码,原封不动的贴上来了,这边顺便提一句国内多数的博客都是相互“借鉴”,有些自己都没理解就把别人的内容 ctrl c ctrl v 过来了。这边我不贴官方的代码,点这里传送 官方的例子。顺便提一句。CountDownLatch 对象其实跟这个内容是无关的,这点我要提一下,具体功能我不多说,官方例子 是为了让程序发送到 redis 通道里面的 消息被程序读取之后 才结束程序 而引入的类。
不多说 直接上代码
来自CODE的代码片
redisConfig.java
上面 我把两个类写在了一起,第一个类 messageReceiver 注释上也有说明,里面只有一个方法,就是接收到消息之后 处理,这边演示我就简单的将他打印在控制台上。
第二个类就是一些配置,注释上我想也应该能看明白。
ok 接下里就是启动程序 看看效果
ok 我用命令 publish 向 chat 通道推送了 helloword (提一下 integer 1 代表的就是 当前订阅的用户)
完美在我程序里面也收到这个消息,并且打印在控制台上。
之前参考网上的例子,发现全部来自一个地方,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); } } |
redisConfig.java
上面 我把两个类写在了一起,第一个类 messageReceiver 注释上也有说明,里面只有一个方法,就是接收到消息之后 处理,这边演示我就简单的将他打印在控制台上。
第二个类就是一些配置,注释上我想也应该能看明白。
ok 接下里就是启动程序 看看效果
ok 我用命令 publish 向 chat 通道推送了 helloword (提一下 integer 1 代表的就是 当前订阅的用户)
完美在我程序里面也收到这个消息,并且打印在控制台上。
相关文章推荐
- redis 消息队列发布订阅模式spring boot实现
- Spring Data Redis实现消息队列——发布/订阅模式
- 使用redis的发布订阅模式实现消息队列
- springboot入门--springboot集成redis实现消息发布订阅模式
- redis实现消息队列&发布/订阅模式使用
- 使用Spring-Redis实现消息的发布/订阅
- Redis消息通知(任务队列和发布订阅模式)
- [置顶] 【Excel_To_DB】SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库(一)
- 消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现
- Spring Boot教程(一)在springboot中用redis实现消息队列
- spring-redis实现消息生产者发布和消费者订阅
- 消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现
- SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列
- Spring Boot使用Redis进行消息的发布订阅
- redis 消息队列 发布、订阅模式
- [置顶] 【Excel_To_DB】SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库(三)
- SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列
- springboot干货——(十三【二】)整合redis实现消息队列
- Spring Boot使用Redis进行消息的发布订阅
- SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列