Spring Data Redis:我怎么知道MessageListener已经准备好了?

时间:2015-08-30 14:00:09

标签: java spring spring-data-redis

根据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()的情况下解决这个问题? 是否有可能获得有关连接失败/成功等的通知?

1 个答案:

答案 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;
}

我现在可以订阅一个新主题并立即发布。