spring boot 使用redis進行發布訂閱
4 人贊了文章
非同步消息的方式有很多,這篇博客介紹如何使用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年的開發經驗可以加群找我要課堂鏈接 注意:是免費的 沒有開發經驗誤入哦)
推薦閱讀:
※PHP操作Redis詳解案例
※基於Redis實現分散式鎖
※SpringBoot集成Redis來實現緩存技術方案
※消息隊列的Redis實現
※redis的實現之美其一