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表示没有订阅者,消息立即失效。

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

  • 相关阅读:
    mongodb基础系列——数据库查询数据返回前台JSP(一)
    整型数组处理算法(十二)请实现一个函数:最长顺子。[风林火山]
    学习C++服务端一:MySql与C++
    【算法】深度优先搜索(DFS)III
    DOS cmd
    C# wpf程序获取当前程序版本
    Climbing Stairs
    Java深入
    非对称算法,散列(Hash)以及证书的那些事
    省市区镇(能够选四级)联动点击自己主动展开下一级
  • 原文地址:https://www.cnblogs.com/chyg/p/6343304.html
Copyright © 2011-2022 走看看