使用ErrorHandlingDeserializer2处理反序列化期间的异常时如何捕获异常和消息键

时间:2020-03-05 20:16:52

标签: spring-kafka

我正在使用spring boot 2.1.7.RELEASE和spring-kafka 2.2.8.RELEASE。并且我正在使用@KafkaListener批注创建消费者,并且正在使用该消费者的所有默认设置。我使用的是Spring-Kafka文档中指定的以下配置。

// other props
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer2.class);
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer2.class);
    props.put(ErrorHandlingDeserializer.KEY_DESERIALIZER_CLASS, StringDeserializer.class);
    props.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, AvroDeserializer.class.getName());
    return new DefaultKafkaConsumerFactory<>(props);

现在,我的要求是在存在反序列化异常时。请建议我该怎么做。

  1. 捕获异常和记录键以记录详细信息
  2. 将此记录发送到DLT

1 个答案:

答案 0 :(得分:1)

将配置为SeekToCurrentErrorHandler的{​​{1}}添加到容器。

请参见the documentationhere

反序列化异常被视为致命异常,将不会重试。

如果出于某种原因要编写自己的错误处理程序,DeadLetterPublishingRecoverer中的代码将显示如何提取异常信息。