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

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

  • 相关阅读:
    19c 新特性: Hint Usage Reports详解
    byte buddy学习笔记
    彻底告别“人工+Excel”低效模式,传统制造业实现“一站式”数据化管理
    有的人想在上班之余做兼职,并且不想投入太多钱
    2019你为什不选择创业?是因为什么原因?
    深入理解pandas读取excel,txt,csv文件等命令
    劳务派遣公司是怎么盈利的?
    为什么穷人大多不敢创业?
    30多岁了仍一事无成,除了去工厂上班还有哪些出路?
    MySQL Change Data Directory
  • 原文地址:https://www.cnblogs.com/chyg/p/6343304.html
Copyright © 2011-2022 走看看