Redis 不仅是一个非常强大的非关系型数据库, 它同时还拥有消息中间件的 pub/sub 功能, 在 spring boot 中进行如下设置就可以使用 Redis 的 pub/sub 功能
案例:
新建一个消息发布者, 设置主题为 topic
- /**
- * @author Gjing
- *
- * 消息发送者
- **/
- @RestController
- public class PubController {
- @Resource
- private StringRedisTemplate stringRedisTemplate;
- private static AtomicInteger count = new AtomicInteger();
- @PostMapping("/message")
- public void sendMessage() {
- int i = count.incrementAndGet();
- stringRedisTemplate.convertAndSend("topic", "消息" + i);
- }
- }
定义消息监听者
- /**
- * @author Gjing
- *
- * 消息监听者
- **/
- @Slf4j
- public class Receiver {
- public void receiveMessage(String message) {
- log.info("监听者 1 收到消息:{}", message);
- }
- }
定义配置类, 配置 Redis 监听者容器和监听者适配器
- /**
- * @author Gjing
- **/
- @Configuration
- public class RedisConfiguration {
- /**
- * 消息适配器
- *
- * 绑定消息监听者和接收监听的方法, 必须要注入这个监听器, 不然会报错
- * @return MessageListenerAdapter
- */
- @Bean
- public MessageListenerAdapter listenerAdapter() {
- return new MessageListenerAdapter(new Receiver(), "receiveMessage");
- }
- /**
- * 定义消息监听者容器
- * @param connectionFactory 连接工厂
- * @param listenerAdapter 消息处理器
- * @return RedisMessageListenerContainer
- */
- @Bean
- public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
- MessageListenerAdapter listenerAdapter) {
- RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
- listenerContainer.setConnectionFactory(connectionFactory);
- listenerContainer.addMessageListener(listenerAdapter, new PatternTopic("topic"));
- return listenerContainer;
- }
- }
运行结果
以上为个人观点, 如有误欢迎各位指正
来源: https://yq.aliyun.com/articles/705859