簡體   English   中英

spring-kafka:不考慮帶有 DeadLetterPublishingRecoverer(BiFunction) 的 DefaultErrorHandler。 未創建深度學習主題

[英]spring-kafka: DefaultErrorHandler with DeadLetterPublishingRecoverer(BiFunction) not considered. No DL topic created

在我的 Spring 使用spring-kafka啟動應用程序中,我試圖用兩件事配置錯誤處理程序:-

  • 在發布到死信主題之前重試消息消費失敗一定次數( FixedBackOff
  • 使用我選擇的名稱創建一個死信主題

使用

// Version highlights
id 'org.springframework.boot' version '2.7.2'
...
implementation 'org.springframework.kafka:spring-kafka' // 2.8.8

這是我使用的代碼,基於我在 Spring 文檔中閱讀的內容,並在幾篇在線文章中重申:

@Bean
public DefaultErrorHandler byteArrayDefaultErrorHandler(KafkaTemplate<String, byte[]> template) {
  var recoverer =
    new DeadLetterPublishingRecoverer(
      template,
      (record, e) -> new TopicPartition("%s.deadLetter".formatted(record.topic()), 0);
    );

  return new DefaultErrorHandler(recoverer, new FixedBackOff(3000, 3));
}

但是上面的bean沒有被考慮/使用。 所以,當消費遇到失敗(目前是通過拋出異常來模擬失敗),

  • 不考慮FixedBackOff ,但使用默認的背靠背嘗試 10 次。
  • 沒有創建 DL 主題。

目前,消費者配置 class 有最少的東西:

@Bean public ConsumerFactory<String, byte[]> byteArrayConsumerFactory() { ... }

@Bean public ConcurrentKafkaListenerContainerFactory<String, byte[]> byteArrayListenerContainerFactory() { .. }

@Bean public DefaultErrorHandler byteArrayDefaultErrorHandler(KafkaTemplate<String, byte[]> template) { ...code pasted above... }

監聽器如下:

@KafkaListener(
 topics = "${app.config.kafka.topic}",
 containerFactory = "byteArrayListenerContainerFactory"
)
public void consumeMessage(ConsumerRecord<String, byte[]> record) { ... }

我不知道我錯過了什么或添加了一些與接線沖突的東西。 高度贊賞幫助弄清楚。

如果您使用的是 Boot 的自動配置容器工廠,錯誤處理程序 bean 將僅通過 boot 連接。

由於您正在創建自己的容器工廠 bean...

@Bean public ConcurrentKafkaListenerContainerFactory<String, byte[]> byteArrayListenerContainerFactory() { .. }

...您必須自己添加錯誤處理程序 - 請參閱setCommonErrorHandler()

框架不會自動提供死信主題; 添加一個@Bean NewTopic dlt() {... }

https://docs.spring.io/spring-kafka/docs/current/reference/html/#configuring-topics

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM