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

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

  • 相关阅读:
    加载页面(Loading)
    js判断手机连接网络类型
    combotree的加载方法
    jquery.util.easyui.dialog
    datagrid后台分页js.js
    安卓使用Canvas绘制工作日程表
    【Oracle】OGG数据初始化之RMAN
    怎样优雅的管理ActionBar
    openwrt undefined reference to ‘getpwent_r’
    通过文件对照工具Merge数据库
  • 原文地址:https://www.cnblogs.com/chyg/p/6343304.html
Copyright © 2011-2022 走看看