为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

人到中年有点甜 2022-11-30 14:36:05
我的应用程序正在收听多个主题。其中一些是压缩主题,用于在内存中加载一些数据。我想先加载这些数据,所以我使用 SmartLifecycle 在其他容器之前手动启动这些容器。它工作得很好,但为了简单起见,我尝试使用 containerGroup@KafkaListener(id = "myId", containerGroup = "compacted", ...)然后在我使用的 SmartLifecycle bean 中:        Collection<MessageListenerContainer> compactedListenerContainers = applicationContext.getBean("compacted", Collection.class);但是一旦我这样做了,在“启动”方法完成后,其他容器就永远不会启动了。如果我将此行替换为:Collection<MessageListenerContainer> compactedListenerContainers = Arrays.asList(registry.getListenerContainer("myId"));它的工作。知道为什么获取 containerGroup 的 bean 会阻止所有其他侦听器工作吗?知道所有其他 @KafkaListeners 只是由以下定义:@KafkaListener(topics = "myTopic")编辑进一步排查,问题与KafkaListenerEndpointRegistry有关。如果 SmartLifeCycle bean 是使用“KafkaListenerEndpointRegistry”作为依赖项创建的,则应用程序正在运行。即使我根本不使用注册表。但是,如果在没有此注册表的情况下创建 SmartLifeCycle bean,应用程序将失败。
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

你需要展示你的容器工厂。

我假设您已autoStartup设置为 false,因为您是手动启动它们。

所以其他人也不会开始;因为您想在压缩主题加载后启动它们,只需调用start()端点注册表,它将启动其他主题。

或者你可以把其他的放在另一个containerGroup.


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信