美文网首页
spring boot 使用redis进行发布订阅

spring boot 使用redis进行发布订阅

作者: 奇点一氪 | 来源:发表于2018-12-17 11:46 被阅读1次

    异步消息的方式有很多,这篇博客介绍如何使用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()));
        }
    }
    

    运行结果如图


    image.png

    相关文章

      网友评论

          本文标题:spring boot 使用redis进行发布订阅

          本文链接:https://www.haomeiwen.com/subject/fpuqkqtx.html