Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 通过Kafka模板发送消息时的异常处理_Apache Kafka_Spring Kafka_Kafka Producer Api - Fatal编程技术网

Apache kafka 通过Kafka模板发送消息时的异常处理

Apache kafka 通过Kafka模板发送消息时的异常处理,apache-kafka,spring-kafka,kafka-producer-api,Apache Kafka,Spring Kafka,Kafka Producer Api,我想知道在通过卡夫卡模板生成卡夫卡消息时,是否有方法捕获异常/可丢弃 我看不出任何东西在失败的时候会抛出卡夫卡例外。在我继续我的应用程序流程之前,我需要查明消息是否已提交给卡夫卡。我知道ListenableFuture会记录失败,但我不知道如何捕获失败 public void sendToKafkaTopic(KafkaMessage data) { ListenableFuture<SendResult<String, KafkaMessage>> futur

我想知道在通过卡夫卡模板生成卡夫卡消息时,是否有方法捕获异常/可丢弃

我看不出任何东西在失败的时候会抛出卡夫卡例外。在我继续我的应用程序流程之前,我需要查明消息是否已提交给卡夫卡。我知道ListenableFuture会记录失败,但我不知道如何捕获失败

public void sendToKafkaTopic(KafkaMessage data) {

    ListenableFuture<SendResult<String, KafkaMessage>> future = kafkaTemplate.send(primaryKafkaTopic, data);
    future.addCallback(new ListenableFutureCallback<SendResult<String, KafkaMessage>>() {

      @Override
      public void onSuccess(SendResult<String, KafkaMessage> result) {
        log.info("sent message='{}' with offset={}", data,
            result.getRecordMetadata().offset());
      }

      @Override
      public void onFailure(Throwable ex) {
        log.error("unable to send message='{}'", data, ex);
      }
    });
  }
然后才能继续我的应用程序流程


如果你只做
Future.get()
,没有什么错。当一个异常在下游发生时,它将从这个阻塞中抛出
get()

最好使用带有超时的变量(
get(10,TimeUnit.SECONDS)
),以防万一:)
  public void sendToKafkaTopic(KafkaMessage data) {

    try {
      kafkaTemplate.send(primaryKafkaTopic, data);
    } catch (RuntimeException err) {
      log.error("unable to send message='{}'", data, ex);
      throw new CustomException(err);
    }
  }
}