У меня есть некоторые методы, помеченные @KafkaListener
, но я хочу запустить только некоторые из них вручную (в зависимости от некоторых условий).
@KafkaListener(id = "consumer1", topics = "topic-name", clientIdPrefix = "client-prefix", autoStartup = "false")
public void consumer1(String message) {
// consume
}
@PostConstruct
private void startConsumers() {
if (true) {
kafkaListenerEndpointRegistry.getListenerContainer("consumer1").start();
}
}
Но в данный момент kafkaListenerEndpointRegistry.getListenerContainers()
пусто список и kafkaListenerEndpointRegistry.getListenerContainer("consumer1")
возвращает null
. Поэтому, возможно, момент, когда вызывается метод @PostConstruct
, слишком ранний, и слушатели все еще не зарегистрированы. Я попытался аннотировать метод startConsumers()
с помощью @Scheduled(fixedDelay = 100)
, и слушатели уже доступны. Но использование @Scheduled
не является хорошим решением для того, что я хочу вызвать один раз после запуска приложения.