异步消息的方式有很多,这篇博客介绍如何使用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年的开发经验可以加群找我要课堂链接 注意:是免费的 没有开发经验误入哦)
网友评论