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

  • 相关阅读:
    EntityFramework,配合Oracle.ManagedDataAccess配置Oracle数据库连接
    使用Speech实现js播放音频
    PushAsync is not supported globally on Android, please use a NavigationPage异常出现及解决方案
    Vs 2017初次配置Xamarin
    本地项目使用github管理
    服务注册和发现 Eureka
    FutureTask的理解
    Syncronized之偏向锁
    Syncronized之自适应自旋锁
    发布订阅-jedis
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/9251086.html
Copyright © 2011-2022 走看看