模式如何工作

如果訊息處理失敗,訊息將以帶有回退時間戳的方式轉發到重試主題。重試主題的消費者隨後會檢查時間戳,如果未到期,則暫停該主題分割槽的消費。當到期時,分割槽消費恢復,訊息再次被消費。如果訊息處理再次失敗,訊息將被轉發到下一個重試主題,重複該模式,直到成功處理,或者嘗試次數耗盡,然後訊息被髮送到死信主題(如果已配置)。

例如,如果您有一個名為“main-topic”的主題,並希望設定非阻塞重試,指數回退時間為1000毫秒,乘數為2,最大嘗試次數為4,它將建立main-topic-retry-1000、main-topic-retry-2000、main-topic-retry-4000和main-topic-dlt主題,並配置相應的消費者。該框架還負責建立主題以及設定和配置監聽器。

使用此策略將失去該主題的 Kafka 排序保證。
您可以設定您喜歡的 AckMode 模式,但建議使用 RECORD

當使用手動 AckModeasyncAcks 設定為 true 時,DefaultErrorHandler 必須配置 seekAfterErrorfalse。從版本 2.9.10、3.0.8 開始,對於此類配置,這將無條件地設定為 false。在早期版本中,需要重寫 RetryTopicConfigurationSupport.configureCustomizers() 方法以將此屬性設定為 false

@Override
protected void configureCustomizers(CustomizersConfigurer customizersConfigurer) {
    customizersConfigurer.customizeErrorHandler(eh -> eh.setSeekAfterError(false));
}

此外,在這些版本之前,無論 asyncAcks 屬性如何,使用預設(日誌記錄)DLT 處理程式都與任何型別的手動 AckMode 不相容。

© . This site is unofficial and not affiliated with VMware.