有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

它工作得很好,但为了简单起见,我尝试使用containerGroup

@KafkaListener(id = "myId", containerGroup = "compacted", ...)

然后在我使用的SmartLifecycle bean中:

        Collection<MessageListenerContainer> compactedListenerContainers = applicationContext.getBean("compacted", Collection.class);

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

如果我将这一行替换为:

Collection<MessageListenerContainer> compactedListenerContainers = Arrays.asList(registry.getListenerContainer("myId"));

它起作用了

知道为什么为containerGroup获取bean会阻止所有其他侦听器工作吗?知道所有其他@kafkalistener的定义如下:

@KafkaListener(topics = "myTopic")

编辑

经过进一步调查,该问题与卡夫卡利斯特登记处有关

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

但是,如果创建的SmartLifeCycle bean没有这个注册表,应用程序就会失败


共 (0) 个答案