springboot使用redis实现发布与订阅
阅读原文时间:2023年07月08日阅读:1
  • 配置redis连接地址

# Redis服务器地址
spring.redis.host=youxiu326.xin
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
  • redis订阅者

    /**

    • 消息处理器POJO

    • redis订阅
      */
      @Component
      public class ConsumerMsg {

      /*接收消息的方法/
      public void receiveMessage(String message,String chanel){
      System.out.println("收到一条消息:"+message);
      System.out.println("通道名称:"+chanel);
      }

    }

  • redis配置类

    @Configuration
    public class RedisMessageConfig{

    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;
    
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        //订阅了一个叫blog.youxiu326.com的通道
        container.addMessageListener(listenerAdapter, new PatternTopic("blog.youxiu326.com"));
        //这个container 可以添加多个messageListener
        return container;
    }
    
    /**
     * 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法
     * @param receiver
     * @return
     */
    @Bean
    MessageListenerAdapter listenerAdapter(ConsumerMsg receiver) {
        //这个地方 是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage”
        //也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

此时

  • ConsumerMsg类就已经可以订阅blog.youxiu326.com通道的消息了

  • redis发布

    @Controller
    public class RedisCtrl {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /**
     * redis发布
     * @return
     */
    @RequestMapping("/test")
    public @ResponseBody String test(){
        /**
         * 通过blog.youxiu326.com通道发送了一条消息
         */
        stringRedisTemplate.convertAndSend("blog.youxiu326.com", "牛逼不不不");
        return "ok";
    }

    }

启动项目,访问 */test 就可以在控制台看到效果

来自 http://blog.youxiu326.com/view/8