Open ZOKEKAI opened 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); } }
使用方式
向队列发布消息: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); } }