【发布时间】:2020-04-27 06:40:42
【问题描述】:
我有一些用@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 方法被调用的那一刻还为时过早,听众还没有注册。
我尝试用@Scheduled(fixedDelay = 100) 注释startConsumers() 方法,并且监听器已经可用。但是对于我想在启动应用程序后调用一次的东西,使用@Scheduled 并不是一个好的决定。
【问题讨论】:
标签: java spring spring-boot apache-kafka spring-kafka