Java 如何在使用SpringKafka框架时处理错误/异常?
我无法找到如何在中为spring kafka消费者执行自定义错误处理 我的要求是:Java 如何在使用SpringKafka框架时处理错误/异常?,java,error-handling,apache-kafka,spring-kafka,Java,Error Handling,Apache Kafka,Spring Kafka,我无法找到如何在中为spring kafka消费者执行自定义错误处理 我的要求是: 对于任何反序列化错误,只需将错误和消息写入数据库 对于@KafkaListener方法下的任何执行错误,请重试3次,然后将错误和消息写入数据库 从spring文档中我发现, 对于1,我必须使用ErrorHandlingDeserializer,然后它将调用@KafkaListener错误处理程序。 对于2,框架提供了处理消息重试的SeekToCurrentErrorHandler 我不明白除了启用配置的重试之外,
@KafkaListener
方法下的任何执行错误,请重试3次,然后将错误和消息写入数据库ErrorHandlingDeserializer
,然后它将调用@KafkaListener错误处理程序。
对于2,框架提供了处理消息重试的SeekToCurrentErrorHandler
我不明白除了启用配置的重试之外,在哪里可以添加将异常/消息写入数据库的代码。将恢复程序添加到
SeekToCurrentErrorHandler
new SeekToCurrentErrorHandler((rec, ex) -> {
Throwable cause = ex.getCause();
if (cause instanceof DeserializationException) {
...
}
else {
...
}, new FixedBackOff(2000L, 2L));
默认情况下,不会重试反序列化异常;大多数其他的在调用恢复程序之前都会重试。这里我没有得到反序列化异常,它被包装在ListenerExecutionFailedException中。我必须首先将异常强制转换为ListenerExecutionFailedException,然后检查它是否包含反序列化异常或其他类型;但你真的不必投下它;所有可丢弃的
都有cause()
。