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客户端使用命令发布:

redis实现消息发布/订阅

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

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

上一篇:JavaScript问题——在浏览器中的offsetLeft/offsetWidth等属性是什么?


下一篇:微信小程序之----加载中提示框loading