Apache kafka 通过Kafka模板发送消息时的异常处理
我想知道在通过卡夫卡模板生成卡夫卡消息时,是否有方法捕获异常/可丢弃 我看不出任何东西在失败的时候会抛出卡夫卡例外。在我继续我的应用程序流程之前,我需要查明消息是否已提交给卡夫卡。我知道ListenableFuture会记录失败,但我不知道如何捕获失败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
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);
}
}
}