springboot使用redis实现发布与订阅

  • 配置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

猜你喜欢

转载自blog.csdn.net/youxiu326/article/details/85068064