我想了解什么时候应该使用 org.springframework.retry.RecoveryCallback 和 org.springframework.kafka.listener.KafkaListenerErrorHandler?
截至今天,我正在使用一个类(实现 org.springframework.retry.RecoveryCallback)来记录错误消息并将消息发送到 DLT,它正在工作。为了向 DLT 发送消息,我使用了 Spring KafkaTemplate,然后遇到了 KafkaListenerErrorHandler 和 DeadLetterPublishingRecoverer。现在,你能建议我,我应该如何使用 KafkaListenerErrorHandler 和 DeadLetterPublishingRecoverer 吗?这可以替代 RecoveryCallback 吗?
这是我当前的 kafkaListenerContainerFactory 代码
@Bean
公共并发KafkaListenerContainerFactory kafkaListenerContainerFactory(){
ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(primaryConsumerFactory());
factory.setRetryTemplate(retryTemplate());
factory.setRecoveryCallback(recoveryCallback);
factory.getContainerProperties().setAckMode(AckMode.RECORD);
factory.setConcurrency(1);
factory.getContainerProperties().setMissingTopicsFatal(false);
return factory; }
如果它现在按你想要的方式工作,为什么要改变它呢?
有多个层,您可以根据需要选择哪一层进行错误处理。
-
KafkaListenerErrorHandler
将在重试期间为每次传送尝试调用,因此您通常不会在重试中使用它。
- Retry
RecoveryCallback
在重试用尽后调用(或者如果您已将异常分类为不可重试,则立即调用)。
-
ErrorHandler
- 位于容器中,如果任何侦听器抛出异常,而不仅仅是异常,则调用该侦听器@KafkaListener
s.
使用该框架的最新版本,您可以完全用SeekToCurrentErrorHandler
配置有一个DeadLetterPublishingRecoverer
and a BackOff
.
The DeadLetterPublishingRecoverer
旨在用于容器错误处理程序,因为它需要原始ConsumerRecord<?, ?>
.
The KafkaListenerErrorHandler
只能访问 spring-messagingMessage<?>
是从ConsumerRecord<?, ?>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)