首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用containerGroup会阻止我的其他侦听器工作?

为什么使用containerGroup会阻止我的其他侦听器工作?
EN

Stack Overflow用户
提问于 2019-05-15 16:11:42
回答 1查看 355关注 0票数 0

我的应用程序正在听几个主题。其中一些是压缩主题,用于在内存中加载某些数据。

我想先加载这些数据,所以我使用SmartLifecycle在其他容器之前手动启动这些容器。

它运行得很好,但是为了简单起见,我尝试使用containerGroup

代码语言:javascript
复制
@KafkaListener(id = "myId", containerGroup = "compacted", ...)

然后,在我使用的SmartLifecycle bean中:

代码语言:javascript
复制
        Collection<MessageListenerContainer> compactedListenerContainers = applicationContext.getBean("compacted", Collection.class);

但是一旦我这样做了,在完成"start“方法之后,其他容器就永远不会启动了。

如果我将这一行改为:

代码语言:javascript
复制
Collection<MessageListenerContainer> compactedListenerContainers = Arrays.asList(registry.getListenerContainer("myId"));

起作用了。

知道为什么获取containerGroup的bean会阻止所有其他侦听器工作吗?知道所有其他@KafkaListener都是由以下代码定义的:

代码语言:javascript
复制
@KafkaListener(topics = "myTopic")

编辑

经进一步研究,该问题与KafkaListenerEndpointRegistry有关。

如果SmartLifeCycle bean是以"KafkaListenerEndpointRegistry“作为依赖创建的,则应用程序正在工作。即使我根本不使用注册表。

但是,如果SmartLifeCycle bean是在没有此注册表的情况下创建的,则应用程序失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 16:32:14

你需要展示你的集装箱工厂。

我想您已经将autoStartup设置为false,因为您正在手动启动它们。

因此,其他内容也不会启动;因为您希望在加载压缩主题之后启动它们,因此只需在端点注册表上调用start(),它就会启动其他主题。

或者你可以把其他的放到另一个containerGroup中。

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

https://stackoverflow.com/questions/56153611

复制
相关文章

相似问题

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