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

  • 相关阅读:
    验证整数 Double 转 int 两种写法
    0 can't find referenced pointcut declarePointExpress
    nested exception is java.lang.IllegalArgumentException: Pointcut is not well-formed
    org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML doc
    嵌入式系统(胡威)2019年春第一次作业 参考答案
    PAT(B) 1021 个位数统计(Java)
    PAT(B) 1020 月饼(Java)
    PAT(B) 1019 数字黑洞(Java)
    PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)
    PAT(B) 1017 A除以B(Java)
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/9251086.html
Copyright © 2011-2022 走看看