我的應(yīng)用程序正在收聽多個主題。其中一些是壓縮主題,用于在內(nèi)存中加載一些數(shù)據(jù)。我想先加載這些數(shù)據(jù),所以我使用 SmartLifecycle 在其他容器之前手動啟動這些容器。它工作得很好,但為了簡單起見,我嘗試使用 containerGroup@KafkaListener(id = "myId", containerGroup = "compacted", ...)然后在我使用的 SmartLifecycle bean 中: Collection<MessageListenerContainer> compactedListenerContainers = applicationContext.getBean("compacted", Collection.class);但是一旦我這樣做了,在“啟動”方法完成后,其他容器就永遠(yuǎn)不會啟動了。如果我將此行替換為:Collection<MessageListenerContainer> compactedListenerContainers = Arrays.asList(registry.getListenerContainer("myId"));它的工作。知道為什么獲取 containerGroup 的 bean 會阻止所有其他偵聽器工作嗎?知道所有其他 @KafkaListeners 只是由以下定義:@KafkaListener(topics = "myTopic")編輯進一步排查,問題與KafkaListenerEndpointRegistry有關(guān)。如果 SmartLifeCycle bean 是使用“KafkaListenerEndpointRegistry”作為依賴項創(chuàng)建的,則應(yīng)用程序正在運行。即使我根本不使用注冊表。但是,如果在沒有此注冊表的情況下創(chuàng)建 SmartLifeCycle bean,應(yīng)用程序?qū)⑹ ?
1 回答

梵蒂岡之花
TA貢獻1900條經(jīng)驗 獲得超5個贊
你需要展示你的容器工廠。
我假設(shè)您已autoStartup
設(shè)置為 false,因為您是手動啟動它們。
所以其他人也不會開始;因為您想在壓縮主題加載后啟動它們,只需調(diào)用start()
端點注冊表,它將啟動其他主題。
或者你可以把其他的放在另一個containerGroup
.
添加回答
舉報
0/150
提交
取消