異步消息的方式有很多,這篇博客介紹如何使用redis進行發布訂閱,
完成這個示例只需要三個文件
1.redis消息監聽配置
@Configuration public class RedisListenerConfig { /** * redis消息監聽器容器 * 可以添加多個監聽不同話題的redis監聽器,只需要把消息監聽器和相應的消息訂閱處理器綁定,該消息監聽器 * 通過反射技術調用消息訂閱處理器的相關方法進行一些業務處理 * @param connectionFactory * @param listenerAdapter * @return
*/ @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter ) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); //可以添加多個 messageListener
container.addMessageListener(listenerAdapter, new PatternTopic("index")); return container; } /** * 消息監聽器適配器,綁定消息處理器,利用反射技術調用消息處理器的業務方法 * @param redisReceiver * @return
*/ @Bean MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) { System.out.println("消息適配器進來了"); return new MessageListenerAdapter(redisReceiver, "receiveMessage"); } //使用默認的工廠初始化redis操作模板
@Bean StringRedisTemplate template(RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); } }
2.消息處理
@Service public class RedisReceiver { public void receiveMessage(String message) { System.out.println("消息來了:"+message); //這里是收到通道的消息之后執行的方法
} }
3.一個發送消息的定時器
//定時器
@EnableScheduling @Component public class TestSenderController { @Autowired private StringRedisTemplate stringRedisTemplate; //向redis消息隊列index通道發布消息
@Scheduled(fixedRate = 3000) public void sendMessage(){ stringRedisTemplate.convertAndSend("index",String.valueOf(Math.random())); } }
運行結果如圖
本篇博客地址:https://gitee.com/zhao-baolin/redis-message