编程语言
首页 > 编程语言> > java – Spring Kafka-将KafkaTemplate与Producer Listener配置并使用Listenable Future注册回调之间的区别

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