我的應用程序正在收聽多個主題。其中一些是壓縮主題,用于在內存中加載一些數據。我想先加載這些數據,所以我使用 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
.
添加回答
舉報
0/150
提交
取消