Spring Kafka-使用生产者监听器配置KafkaTemplate与使用Listenable Future注册回调之间的区别
所以我在浏览Spring kafka文档时,遇到了Production Listener。这就是春季卡夫卡文档所说的 -
“或者,您可以使用 ProducerListener 配置 KafkaTemplate,以获得包含发送结果(成功或失败)的异步回调,而不是等待 Future 完成。
他们还指定了接口-
public interface ProducerListener<K, V> {
void onSuccess(String topic, Integer partition, K key, V value,
RecordMetadata recordMetadata);
void onError(String topic, Integer partition, K key, V value,
Exception exception);
boolean isInterestedInSuccess();
}
所以我的理解是,如果你想对消息的成功和失败做些什么,实现接口ProducerListener并将其注册到KafkaTemplate。它是异步的,因此您不必等待将来完成,即可知道发送操作的结果。
下面大约3个句子,它提到你还可以添加一个回调,通过KakfaTemplate的发送方法返回ListenableFuture。这也是异步的。
future.addCallback(new ListenableFutureCallback<SendResult<Integer,
String>>() {
@Override
public void onSuccess(SendResult<Integer, String> result) {
...
}
@Override
public void onFailure(Throwable ex) {
...
}
});
所以我想知道两者之间的确切区别是什么,因为它们都是异步的。在 onSuccess 和 onFailure/onError 方法中接收的数据之间的差异。或者,在向ListenableFuture添加回调之前,将ProducerListener添加到KafkaTemplate的功能是开发的(因为将来如果不阻止它 - get()方法,就无法知道异步计算的结果),反之亦然。因此,只是为了确保向后兼容性,两者都被允许保持打开状态。使用一种方法是否比使用另一种方法有任何性能优势。
提前感谢您。