根据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()的情况下解决这个问题呢?是否有可能被告知连接失败/成功等?
发布于 2015-08-31 07:24:04
我遇到的问题是,当订阅某个主题时消息丢失,然后在初始化过程中设置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;
}我现在可以订阅一个新的主题,并立即发布给它。
https://stackoverflow.com/questions/32297321
复制相似问题