java – Spring Kafka-将KafkaTemplate与Producer Listener配置并使用Listenable Future注册回调之间的区别
作者:互联网
所以我正在阅读Spring kafka文档并遇到了Producer Listener.这就是Spring Kafka文档所说的 –
“或者,您可以使用ProducerListener配置KafkaTemplate,以获取带有发送结果(成功或失败)的异步回调,而不是等待Future完成.”
他们还指定了界面 –
public interface ProducerListener<K, V> {
void onSuccess(String topic, Integer partition, K key, V value,
RecordMetadata recordMetadata);
void one rror(String topic, Integer partition, K key, V value,
Exception exception);
boolean isInterestedInSuccess();
}
所以我的理解是,如果你想在成功和消息失败时做一些事情,实现接口ProducerListener并将其注册到KafkaTemplate.它是异步的,因此您不必等待将来完成,以了解您的发送操作的结果.
下面大约3个句子,它提到你也可以用KakfaTemplate的send方法返回的ListenableFuture添加一个回调.这也是异步的.
future.addCallback(new ListenableFutureCallback<SendResult<Integer,
String>>() {
@Override
public void onSuccess(SendResult<Integer, String> result) {
...
}
@Override
public void onFailure(Throwable ex) {
...
}
});
所以我想知道两者之间的确切区别是什么,因为它们都是异步的.是onSuccess和onFailure / one rror方法接收的数据之间的区别.或者是在向ListenableFuture添加回调之前开发的KafkaTemplate中添加ProducerListener的能力(因为未来不会阻塞it-get()方法就无法知道异步计算的结果)或反之亦然.因此,为了确保向后兼容性,两者都可以继续使用.使用一种方法比其他方法有任何性能优势.
先感谢您.
解决方法:
您的猜测“几乎”正确 – ProducerListener概念早于KafkaTemplate(在早期的spring-integration-kafka项目中,该项目早于spring-kafka – 该项目现在基于spring-kafka).
但是,如果你只是被动地感兴趣,它仍然有一个地方 – 例如LoggingProducerListener.
如果您需要在调用代码的上下文中知道结果,则向ListenableFuture添加回调更为适用.
>执行模板操作
>使用倒计时的锁存器添加回调(可能还有日志)
>做更多的工作
>等待闩锁倒计时
当然,你可以更简单地获得同样的效果……
>执行模板操作
>做更多的工作
>获得未来的结果
…但是可能存在第一种方法是首选的情况,例如进行多项操作并等待它们全部完成.
没有真正的性能差异.
标签:java,spring,spring-kafka 来源: https://codeday.me/bug/20190627/1305145.html