有什么区别?术语KafkaConsumer和KafkaListener可以互换使用吗?
答案 0 :(得分:3)
@KafkaListener
是ConcurrentMessageListenerContainer
的高级API,它在KafkaConsumer
周围产生了多个内部侦听器。
不同之处在于,KafkaConsumer
API在需要时调用poll()
时可以按需可轮询。侦听器抽象即将在该poll()
周围无限循环,并且每当它们从poll()
出现时,它都会为记录生成消息。我们有一个任务执行器,它运行如下逻辑:
while (isRunning()) {
try {
pollAndInvoke();
}
catch (@SuppressWarnings(UNUSED) WakeupException e) {
// Ignore, we're stopping
}
catch (NoOffsetForPartitionException nofpe) {
this.fatalError = true;
ListenerConsumer.this.logger.error("No offset and no reset policy", nofpe);
break;
}
catch (Exception e) {
handleConsumerException(e);
}
catch (Error e) { // NOSONAR - rethrown
Runnable runnable = KafkaMessageListenerContainer.this.emergencyStop;
if (runnable != null) {
runnable.run();
}
this.logger.error("Stopping container due to an Error", e);
wrapUp();
throw e;
}
}
在该KafkaConsumer.poll()
中调用pollAndInvoke();
。