Почему использование containerGroup мешает другим слушателям работать? - PullRequest
0 голосов
/ 15 мая 2019

Мое приложение слушает несколько тем.Некоторые из них являются уплотненными темами, используемыми для загрузки в память некоторых данных.

Я хотел загрузить первые данные, поэтому я использовал 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 создан без этого реестра, приложение завершится ошибкой.

1 Ответ

1 голос
/ 15 мая 2019

Вам нужно показать свою фабрику контейнеров.

Полагаю, у вас autoStartup установлено значение false, поскольку вы запускаете их вручную.

Так что остальные тоже не запустятся;так как вы хотите запустить их после загрузки ваших сжатых тем, просто вызовите start() в реестре конечных точек, и он запустит остальные.

Или вы можете поместить другие в другую containerGroup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...