zoukankan      html  css  js  c++  java
  • java使用redis做发布订阅

    配置文件:

    package net.rdd.config;
    
    import net.rdd.listener.RddMessageListener;
    import net.rdd.mq.MessageReceiver;
    import org.springframework.beans.factory.annotation.Configurable;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.listener.PatternTopic;
    import org.springframework.data.redis.listener.RedisMessageListenerContainer;
    import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
    import org.springframework.stereotype.Controller;
    
    /**
     * Created by 东东 on 2018/11/18.
     */
    @Configuration
    public class RedisMqConfig {
    
        /**
         * redis消息监听器容器
         */
        @Bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                                MessageListenerAdapter listenerAdapter,RddMessageListener rddMessageListener) {
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            //订阅了test的通道
            //可以多个
            container.addMessageListener(listenerAdapter, new PatternTopic("test"));
    //        container.addMessageListener(listenerAdapter, new PatternTopic("test"));
            container.addMessageListener(rddMessageListener, new PatternTopic("test"));
    
            return container;
        }
    
        /**
         * 消息监听器适配器
         * @param receiver
         * @return
         */
          @Bean
        MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
            //这个地方 是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage”
            //也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看
            //这里可以指定方法,也可以不指定方法,重写onMessage方法,如果指定了方法,则按指定的方法执行,如果没有则或执行onMessage方法.
            //这里跟监听redis key过期那差不多,参见我博客里面有
    //        return new MessageListenerAdapter(receiver,"receiveMessage");
    
            return new MessageListenerAdapter(receiver);
        }
    
        @Bean
        MessageListenerAdapter rddlistenerAdapter(RddMessageListener receiver) {
            return new MessageListenerAdapter(receiver, "onMessage");
        }
    
    
    }
    
    

    监听器:

    package net.rdd.listener;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.data.redis.connection.Message;
    import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    import org.springframework.stereotype.Component;
    
    @Component
    public class RddMessageListener extends MessageListenerAdapter {
    //public class RedisMessageListener implements MessageListener {
    
        private final Logger log = LoggerFactory.getLogger(getClass());
    
    	private final RedisSerializer<String> stringSerializer = new StringRedisSerializer();
    	
    	@Override
    	//key过期会执行这个方法
    	public void onMessage(Message message, byte[] pattern) {
    
    		String key = stringSerializer.deserialize(message.getBody());
    
    		System.out.println("RddMessageListener"+key);
    
    	}
    
    
    }
    
    

    具体发送,通过注入StringRedisTemplate,test是topic,可以设置多个:

       stringRedisTemplate.convertAndSend("test","");
    

    参考:https://blog.csdn.net/u012995888/article/details/79377512
    自己整理的源码:https://github.com/stackXu/SpringBootRedis

    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    [转]SVN服务器搭建和使用(二)
    [转]SVN服务器搭建和使用(一)
    BZOJ 2049 Sdoi2008 Cave 洞穴勘测
    BZOJ 1589 Usaco2008 Dec Trick or Treat on the Farm 采集糖果
    BZOJ 2796 POI2012 Fibonacci Representation
    BZOJ 2115 Wc2011 Xor
    BZOJ 3105 CQOI2013 新Nim游戏
    BZOJ 2460 Beijing2011 元素
    BZOJ 3687 简单题
    BZOJ 1068 SCOI2008 压缩
  • 原文地址:https://www.cnblogs.com/javayida/p/13347087.html
Copyright © 2011-2022 走看看