根据RedisMessageListnerContainer
-
public void addMessageListener(MessageListener listener, Topic topic):
向(可能正在运行的)容器添加消息侦听器。如果容器正在运行,则侦听器会尽快开始接收(匹配)消息 。
上面的引用似乎表明,没有真正的方法可以知道听众何时准备好 - 或者订阅是否成功。
所以,鉴于我发布并订阅了一个频道 - 在我开始发布之前,等待需要多长时间?在我的测试中,只需执行
container.addMessageListener(listener, topic);
for(int i = 0; i < 10; i++) {
template.publish(topic, content);
}
表示我没有收到我自己发布的前3-5条消息。
如何在不诉诸Thread.sleep()
的情况下解决这个问题?
是否有可能获得有关连接失败/成功等的通知?
答案 0 :(得分:0)
我在订阅主题时丢失了这些消息的问题,然后在bean初始化期间设置MessageListener bean以监听虚拟主题时,立即发布消息就消失了:
@Bean
ChannelTopic channelTopic() {
return new ChannelTopic(UUID.randomUUID().toString());
}
@Bean
RedisMessageListenerContainer redisContainer(JedisConnectionFactory jedisConnectionFactory) {
final RedisMessageListenerContainer redisContainer = new MessageListenerContainerAdapter();
redisContainer.setConnectionFactory(jedisConnectionFactory);
redisContainer.addMessageListener(messageListenerAdapter(messageReceiveQueue()), channelTopic());
return redisContainer;
}
我现在可以订阅一个新主题并立即发布。