簡體   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