Redis pub/sub 异常,正常发布订阅一段时间 订阅者监听失效
1.redis pub/sub运行一段时间之后,在client中使用pubsub channels命令无法查询到订阅监听
2.项目启动后是能正常发布和订阅,订阅监听的程序有正常执行,但是大概凌晨1点左右之后,订阅那部分就没有响应了,pubsub channels也无法查询到,发布的位置正常。
3.redis的日志中无异常
4.有参考这https://blog.csdn.net/luyaoyi... 进行设置,目前配置是“"normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
5.以下是 redis.xml 对于pub/sub的监听配置
<bean id="redisMessageListener503" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<constructor-arg>
<bean class="com.sfa.ghs.webservice.listener.RedisMessageListener503"/>
</constructor-arg>
</bean>
<bean id="redisMessageListener68" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<constructor-arg>
<bean class="com.sfa.ghs.webservice.listener.RedisMessageListener68"/>
</constructor-arg>
</bean>
<bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
<property name="connectionFactory" ref="jeidsConnectionFactory" />
<property name="messageListeners">
<map>
<entry key-ref="redisMessageListener503">
<list>
<!-- 普通订阅,订阅具体的频道 -->
<bean class="org.springframework.data.redis.listener.ChannelTopic">
<constructor-arg value="channel_503" />
</bean>
</list>
</entry>
<entry key-ref="redisMessageListener68">
<list>
<!-- 普通订阅,订阅具体的频道 -->
<bean class="org.springframework.data.redis.listener.ChannelTopic">
<constructor-arg value="channel_68" />
</bean>
</list>
</entry>
</map>
</property>
</bean>
6.以下是订阅实现类的部分代码
/**
* 503消息订阅 - 数据清洗
*
* @author 89003039
* @date 2018年5月16日 下午6:45:33
*/
public class RedisMessageListener503 implements MessageListener, IRedisMessageListener {
private static Logger logger = Logger.getLogger(RedisMessageListener503.class);
@Autowired
private IJoindataBroadWeightInfoBiz joindataBroadWeightInfoBiz;
@Autowired
private IJoinDataWsBiz joinDataWsBiz;
@Autowired
private JedisClient jedisClusterSingle;
/**
* 清洗503数据
* 1.解析503数据
* 2.根据车标+板箱从redis中获取67、68数据
* 3.将503、67数据持久化
* 4.将503数据存入redis 过期时间一分钟,持续清洗
* @author 89003039
* @return
* @date 2018年5月28日 上午8:15:51
*/
@Override
public synchronized void onMessage(Message message, byte[] bytes) {
logger.info("**** begin 503 data clear. ****");
String msgContent = (String) jedisClusterSingle.getValueSerializer(message.getBody());
String topic = (String) jedisClusterSingle.getStringSerializer(message.getChannel());
logger.info("**** topic:" + topic + " ****");
long begin = System.currentTimeMillis();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论