首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring :我怎么知道MessageListener已经准备好了?

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

Stack Overflow用户
提问于 2015-08-30 14:00:08
回答 1查看 1.6K关注 0票数 0

根据RedisMessageListnerContainer的文档-

public void addMessageListener(MessageListener listener, Topic topic)

将消息侦听器添加到(可能正在运行的)容器。如果容器正在运行,侦听器将尽快开始接收(匹配)消息

上面的引文似乎表明,没有真正的方法知道侦听器什么时候准备好了,或者订阅是否成功。

那么,假设我发布并订阅了一个频道--我应该等多久才能开始发布呢?在我的测试中,只需执行

代码语言:javascript
复制
container.addMessageListener(listener, topic);
for(int i = 0; i < 10; i++) {
   template.publish(topic, content);
}

这意味着我没有收到我自己发布的前3-5条信息。

我如何在不诉诸Thread.sleep()的情况下解决这个问题呢?是否有可能被告知连接失败/成功等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-31 07:24:04

我遇到的问题是,当订阅某个主题时消息丢失,然后在初始化过程中设置MessageListener bean以侦听虚拟主题时,立即将消息发布到该主题:

代码语言:javascript
复制
@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;
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32297321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档