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

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