zoukankan      html  css  js  c++  java
  • redis实现消息发布/订阅

    redis实现简单的消息发布/订阅模式。

    消息订阅者:

    package org.common.component;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.connection.Message;
    import org.springframework.data.redis.connection.MessageListener;
    import org.springframework.data.redis.core.RedisTemplate;
    
    
    
    public class RedisMessageListener implements MessageListener {
    
    	 @Autowired  
    	 private RedisTemplate<String, Object> redisTemplate;
    	 
    	 private static final Logger logger = LoggerFactory.getLogger(RedisMessageListener.class);
    	
    
    	@Override
    	public void onMessage(Message message, byte[] pattern) {
    		logger.info("channel:{}",new String(message.getChannel()));
    		logger.info("topic:{}",(String)redisTemplate.getValueSerializer().deserialize(message.getBody()));
    		
    	}
    
    }
    

      

    xml配置:

    <bean id="redisMessageListener" class="org.common.component.RedisMessageListener" />
    	
     	<bean id="messageListener"
            class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
            <constructor-arg>
            	<ref bean="redisMessageListener"/>
            </constructor-arg>
        </bean>
     
        <bean id="redisContainer"
            class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
            <property name="connectionFactory" ref="jedisConnectionFactory" />
            <property name="messageListeners">
                <map>
                    <entry key-ref="messageListener">
                        <list>
                            <bean class="org.springframework.data.redis.listener.ChannelTopic">
                                <constructor-arg value="chargeRequest" />
                            </bean>
                            <!-- <bean class="org.springframework.data.redis.listener.PatternTopic">
                                <constructor-arg value="hello*" />
                            </bean>
                            <bean class="org.springframework.data.redis.listener.PatternTopic">
                                <constructor-arg value="tv*" />
                            </bean> -->
                        </list>
                    </entry>
                </map>
            </property>
        </bean>
    

      

    消息发布可以使用redisTemplate.convertAndSend("", "");

    或者在安装的redis客户端使用命令发布:

    结果为 (integer) 0表示没有订阅者,消息立即失效。

    网上写的很多都不太靠谱,这个实测通过。

  • 相关阅读:
    关于ip层的作用网址链接
    转载 TCPIP学习笔记之概述
    转载pll工作模式解析
    关于modelsim添加库的说明
    转载.Avalon-MM 阿窝龙妹妹应用笔记
    转载.怎样在Quartus II中转化HDL文件为bsf文件?
    niosii boot过程
    转载--傅里叶级数的几何意义 – 巧妙记忆公式的方法
    第十三篇:带缓冲的IO( 标准IO库 )
    第十二章:Linux中权限控制实例
  • 原文地址:https://www.cnblogs.com/chyg/p/6343304.html
Copyright © 2011-2022 走看看