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

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

  • 相关阅读:
    个推推出青少年网络游戏防沉迷解决方案,助力开发者构建完善的青少年保护系统!
    个推2022届校园招聘火热启动!数据岗、算法岗、研发岗,热门技术岗位等你来!
    iOS里的动态库和静态库
    idea中svn回退到指定版本
    稻花香项目接口文档
    Ubuntu系统记录
    获取当前系统名称、获取当前操作系统信息
    Temporary failure in name resolution
    零基础学python:错误与异常
    Python内置函数之输入输出函数
  • 原文地址:https://www.cnblogs.com/chyg/p/6343304.html
Copyright © 2011-2022 走看看