异步消息的方式有很多, 这篇博客介绍如何使用 redis 进行发布订阅,
完成这个示例只需要三个文件
1.redis 消息监听配置
- @Configurationpublicclass RedisListenerConfig {
- /** * redis 消息监听器容器
- * 可以添加多个监听不同话题的 redis 监听器, 只需要把消息监听器和相应的消息订阅处理器绑定, 该消息监听器
- * 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理
- * @param connectionFactory
- * @param listenerAdapter
- * @return*/ @Bean
- RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
- MessageListenerAdapter listenerAdapter
- ) {RedisMessageListenerContainer container =new RedisMessageListenerContainer();
- container.setConnectionFactory(connectionFactory);
- // 可以添加多个 messageListenercontainer.addMessageListener(listenerAdapter,newPatternTopic("index"));
- return container;
- }
- /** * 消息监听器适配器, 绑定消息处理器, 利用反射技术调用消息处理器的业务方法
- * @param redisReceiver
- * @return*/ @Bean
- MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) {
- System.out.println("消息适配器进来了");
- returnnewMessageListenerAdapter(redisReceiver, "receiveMessage");
- }
- // 使用默认的工厂初始化 redis 操作模板 @Bean
- StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
- returnnew StringRedisTemplate(connectionFactory);
- }
- }
2. 消息处理
- @Servicepublicclass RedisReceiver {
- publicvoid receiveMessage(String message) {
- System.out.println("消息来了:"+message);
- // 这里是收到通道的消息之后执行的方法 }
- }
3. 一个发送消息的定时器
- // 定时器 @EnableScheduling
- @Componentpublicclass TestSenderController {
- @Autowired
- private StringRedisTemplate stringRedisTemplate;
- // 向 redis 消息队列 index 通道发布消息 @Scheduled(fixedRate = 3000)
- publicvoid sendMessage(){
- stringRedisTemplate.convertAndSend("index",String.valueOf(Math.random()));
- }
- }
运行结果如图
{附}: 大家可以点击加入群:[java 高级架构进阶] :https://jq.qq.com/?_wv=1027&k=575y0Kj 里面有 Java 高级大牛直播讲解知识点 走的就是高端路线 (如果你想跳槽换工作 但是技术又不够 或者工作上遇到了瓶颈 我这里有一个 JAVA 的免费直播课程 讲的是高端的知识点基础不好的误入哟 只要你有 1-5 年的开发经验可以加群找我要课堂链接 注意: 是免费的 没有开发经验误入哦)
来源: http://www.jianshu.com/p/f1d652594810