当前位置:   article > 正文

【案例】SpringBoot使用Redis发布订阅_springboot整合redis发布订阅程序案列

springboot整合redis发布订阅程序案列

【案例】SpringBoot使用Redis发布订阅

第一种方式

  1. 步骤

    1. 配置监听消息类
    2. 添加监听容器
    3. 订阅频道
    4. 向频道发布消息
  2. 消息监听

    1. @Component
      public class RedisListener implements MessageListener {
      
          @Resource
          private RedisTemplate<String,Object> redisTemplate;
          @Override
          public void onMessage(Message message, byte[] pattern) {
      
              // 获取消息
              byte[] messageBody = message.getBody();
              // 使用值序列化器转换
              Object msg = redisTemplate.getValueSerializer().deserialize(messageBody);
              // 获取监听的频道
              byte[] channelByte = message.getChannel();
              // 使用字符串序列化器转换
              Object channel = redisTemplate.getStringSerializer().deserialize(channelByte);
              // 渠道名称转换
              String patternStr = new String(pattern);
              System.out.println(patternStr);
              System.out.println("---频道---: " + channel);
              System.out.println("---消息内容---: " + msg);
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
  3. 创建监听配置类

    1. 订阅多个频道使用通配符 *

    2. package com.mucd.config;
      
      import com.mucd.service.RedisListener;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.data.redis.connection.RedisConnectionFactory;
      import org.springframework.data.redis.listener.PatternTopic;
      import org.springframework.data.redis.listener.RedisMessageListenerContainer;
      
      /**
       * @author mucd
       */
      @Configuration
      public class RedisConfiguration {
      
          @Bean
          public RedisMessageListenerContainer container(RedisConnectionFactory factory, RedisListener listener) {
              RedisMessageListenerContainer container = new RedisMessageListenerContainer();
              container.setConnectionFactory(factory);
              //订阅频道redis.news 和 redis.life  这个container 可以添加多个 messageListener
              container.addMessageListener(listener, patternTopic());
              return container;
          }
      
          /**
           * 订阅多个topic
           * @return new PatternTopic
           */
          @Bean
          public PatternTopic patternTopic(){
              return new PatternTopic("redis.*");
          }
      
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
    3. 如果只订阅个别频道使用下面的方式

    4. package com.mucd.config;
      
      import com.mucd.service.RedisListener;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.data.redis.connection.RedisConnectionFactory;
      import org.springframework.data.redis.listener.PatternTopic;
      import org.springframework.data.redis.listener.RedisMessageListenerContainer;
      
      /**
       * @author mucd
       */
      @Configuration
      public class RedisConfiguration {
      
          @Bean
          public RedisMessageListenerContainer container(RedisConnectionFactory factory, RedisListener listener) {
              RedisMessageListenerContainer container = new RedisMessageListenerContainer();
              container.setConnectionFactory(factory);
              //container可以添加多个订阅频道
              container.addMessageListener(listener,new ChannelTopic("topic"));
              container.addMessageListener(listener,new ChannelTopic("topic02"));
              return container;
          }
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
  4. 测试

    1. @Resource
      private RedisTemplate<String, Object> redisTemplate;
      
      @RequestMapping("/send")
      public void test01() {
          redisTemplate.convertAndSend("redis.username", "redis发布的第一条消息");
          redisTemplate.convertAndSend("redis.life", "redis发布的第一条消息");
          log.info("执行完成!");
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

2022/07/21

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号