Ind*_*nde 7 java spring spring-kafka
因此,我正在阅读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 onError(String topic, Integer partition, K key, V value,
Exception exception);
boolean isInterestedInSuccess();
}
Run Code Online (Sandbox Code Playgroud)
因此,我的理解是,如果您想对消息的成功和失败做一些事情,请实现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) {
...
}
});
Run Code Online (Sandbox Code Playgroud)
所以我想知道两者之间的确切区别是什么,因为它们都是异步的。是onSuccess和onFailure / onError方法中接收到的数据之间的区别。或者是在将回调函数添加到ListenableFuture之前(因为将来在不阻塞it-get()方法的情况下不知道异步计算的结果)之前,已经开发了在KafkaTemplate中添加ProducerListener的功能(反之亦然) 。因此,仅为了确保向后兼容,两者都可以继续使用。使用一种方法相对于其他方法是否具有任何性能优势。
先感谢您。
您的猜测“几乎”是正确的-该ProducerListener概念早于KafkaTemplate(早于该spring-integration-kafka项目的早期项目spring-kafka-该项目现在基于spring-kafka)。
但是,如果您只是被动地感兴趣,它仍然占有一席之地-例如LoggingProducerListener。
ListenableFuture如果您需要在调用代码的上下文中了解结果,则向中添加回调更为适用。
当然,使用...您可以更简单地获得相同的效果。
...但是在某些情况下,首选第一种方法,例如执行多项操作并等待它们全部完成。
没有实际的性能差异。
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |