Мое приложение слушает несколько тем.Некоторые из них являются уплотненными темами, используемыми для загрузки в память некоторых данных.
Я хотел загрузить первые данные, поэтому я использовал SmartLifecycle, чтобы вручную запустить этот контейнер перед другими контейнерами.
Этоработает отлично, но для простоты я попытался использовать containerGroup
@KafkaListener(id = "myId", containerGroup = "compacted", ...)
Затем в компоненте SmartLifecycle я использовал:
Collection<MessageListenerContainer> compactedListenerContainers = applicationContext.getBean("compacted", Collection.class);
Но как только я это сделаю, после «запуска»Метод завершен, другие контейнеры никогда не запускаются.
Если я заменим эту строку на:
Collection<MessageListenerContainer> compactedListenerContainers = Arrays.asList(registry.getListenerContainer("myId"));
Его работа.
Любая идея, почему получить бин дляcontainerGroup помешает всем другим слушателям работать?Зная, что все другие @KafkaListeners просто определены следующим образом:
@KafkaListener(topics = "myTopic")
Редактировать
После дальнейших исследований проблема связана с KafkaListenerEndpointRegistry.
Если компонент SmartLifeCycle создается с зависимостью «KafkaListenerEndpointRegistry», приложение работает.Даже если я вообще не использую реестр.
Но если bean-компонент SmartLifeCycle создан без этого реестра, приложение завершится ошибкой.