0

根据文档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()?是否可以收到有关连接失败/成功等的通知?

4

1 回答 1

0

当我设置 MessageListener bean 以在 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;
}

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

于 2015-08-31T07:24:04.753 回答