繁体   English   中英

spring-kafka:DeadLetterPublishingRecoverer vs RetryTopicConfiguration

[英]spring-kafka: DeadLetterPublishingRecoverer vs RetryTopicConfiguration

DefaultErrorHandlerRetryTopicConfiguration/Builder有什么关系? 他们可以一起工作还是一个优先于另一个?

我正在尝试设置我的消费量

  1. 重试一定次数( FixedBackOff(attempts = 3, interval = 5s)
  2. 使用单个主题进行重试( RetryTopicConfiguration.useSingleTopicForFixedDelays有效)
  3. 自定义重试主题的名称(比如main-topic-name.retry )。 还没有找到任何让我这样做的类/方法。
  4. 如果重试次数用尽,则使用自定义名称 ( main-topic-name.deadLetter ) 发送到死信。 DeadLetterPublishingRecoverer第二个参数BiFunction应该可以工作,但看起来 DL 主题必须事先创建。 不完全确定。

观察

  • 如果我在没有重试相关属性配置的情况下使用DeadLetterPublishingRecoverer ,我可以使用硬编码的FixedBackOff重试( return new DefaultErrorHandler(recoverer, new FixedBackOff(5000, 3));
  • 如果我将DeadLetterPublishingRecoverer重试相关的属性配置一起使用,则会覆盖上述硬编码的退避。 即使我提供了一个配置的错误处理程序实例,我也很困惑覆盖是如何发生的。
  • 通过仅使用DeadLetterPublishingRecoverer ,我没有获得单独的重试主题。
  • 通过使用RetryTopicConfiguration (带或不带恢复器),我得到一个重试主题,不是我想要的名称,而是默认名称。 但是,使用的死信主题不是我的,是在DeadLetterPublishingRecoverer中提供的,而是默认的( ....-dlt

我希望人们会遇到这个问题并找到我打算设置消费方式的解决方案(上面的编号列表)。

帮助表示赞赏

您的问题似乎更多是关于主题命名而不是关于DeadLetterPubishingRecoverer

如果只需要更改主题的后缀,例如main-topic-name.retrymain-topic-name.deadLetter ,可以使用RetryTopicConfigurationBuilder中的方法,例如:

@Bean
public RetryTopicConfiguration myRetryTopic(KafkaTemplate<String, MyOtherPojo> template) {
    return RetryTopicConfigurationBuilder
            .newInstance()
            .useSingleTopicForFixedDelays()
            .retryTopicSuffix(".retry")
            .dltTopicSuffix(".deadletter")
            .create(template);
}

如果您需要更多自定义,您还可以提供RetryTopicNamesProviderFactory

有关更多详细信息,请参阅功能的主题命名文档 - 版本2.8.x2.9.x。

关于与DefaultErrorHandlerDeadLetterPubishingRecoverer的交互,该功能的工作方式是框架将设置自己的DEHDLPR来处理记录转发到重试主题和 dlt。

如有必要,您可以自定义这些组件 - 对于2.9.x ,请参阅文档的此部分以了解如何配置它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM