Spring Data Redis:我怎么知道 MessageListener 准备好了?
Spring Data Redis: How do I know that MessageListener is ready?
根据 RedisMessageListnerContainer
-
的文档
public void addMessageListener(MessageListener 监听器,
题目题目):
Adds a message listener to the (potentially running) container. If the container is running, the listener starts receiving (matching) messages as soon as possible.
上面的引述似乎表明没有真正的方法知道侦听器何时准备好 - 或者订阅是否成功。
那么,假设我发布并订阅了一个频道 - 我应该等待多长时间才能开始发布?在我的测试中,只需执行
container.addMessageListener(listener, topic);
for(int i = 0; i < 10; i++) {
template.publish(topic, content);
}
表示我没有收到我自己发布的前 3-5 条消息。
如何在不诉诸 Thread.sleep()
的情况下解决这个问题?
是否有可能收到有关连接 failure/success 等的通知?
当我在 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;
}
我现在可以订阅新主题并立即发布。
根据 RedisMessageListnerContainer
-
public void addMessageListener(MessageListener 监听器, 题目题目):
Adds a message listener to the (potentially running) container. If the container is running, the listener starts receiving (matching) messages as soon as possible.
上面的引述似乎表明没有真正的方法知道侦听器何时准备好 - 或者订阅是否成功。
那么,假设我发布并订阅了一个频道 - 我应该等待多长时间才能开始发布?在我的测试中,只需执行
container.addMessageListener(listener, topic);
for(int i = 0; i < 10; i++) {
template.publish(topic, content);
}
表示我没有收到我自己发布的前 3-5 条消息。
如何在不诉诸 Thread.sleep()
的情况下解决这个问题?
是否有可能收到有关连接 failure/success 等的通知?
当我在 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;
}
我现在可以订阅新主题并立即发布。