zoukankan      html  css  js  c++  java
  • spring boot 使用redis进行发布订阅

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

  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/9251086.html
Copyright © 2011-2022 走看看