xxw1754352621 / java-dev

愿景:提升自我知识容量,扩展自我知识边界
Apache License 2.0
6 stars 2 forks source link

使用Redis集群工具类jedisCluster的发布订阅功能遇到的问题 #13

Open ZOKEKAI opened 5 years ago

ZOKEKAI commented 5 years ago

使用方式

向队列发布消息:jedisCluster.publish(channel, message)

订阅队列:jedisCluster.subscribe(jedisPubSub, channel)

问题描述

在订阅时,以下两种不同的书写方式会引起不同的结果,第一个能正常连续监听并且消费队列消息。相反,第二种写法只能监听消费第一条进入队列中的消息,往队列中放入第二条以及往后的消息时,监听者不再消费消息,犹如线程停止了一般。

第一种写法(正常消费)

@PostConstruct public void initSubscribe() { subscribeExecutor.submit(() -> jedisCluster.subscribe(new JedisPubSub() { @Override public void onMessage(String channel, String message) { log.info("从Redis渠道{}接收到的计费信息为:{}", channel, message); } }, "redis-result-channel")); }

第二种写法(不能正常消费)

@PostConstruct public void initSubscribe() { subscribeExecutor.submit(() -> jedisCluster.subscribe(new RedisReceiver(), ""redis-result-channel"")); }

@Slf4j public class RedisReceiver extends JedisPubSub { @Override public void onMessage(String channel, String message) { log.info("从Redis渠道{}接收到的计费信息为:{}", channel, message); } }