[英]Spring Boot Kafka suppress exception
我有一個 kafka 監聽器,如果實現拋出異常,它將重試幾次。 拋出異常時,將其記錄為錯誤。 這會污染我們的哨兵日志。 我想將 Kafka 的消費者錯誤級別更改為警告級別。
細節:
我有一個 Kafka 偵聽器,必須重試一些事件。
@KafkaListener(...)
@RetryableTopic(..)
public void consume(ConsumerRecord<?,?> event) {
service.sayHello(...); //this call can throw UnhappyException
}
在拋出 UnHappyException 的情況下,它被記錄為
> Caused by: org.springframework.kafka.listener.ListenerExecutionFailedException:
> Listener method 'public void
> com.company.hello.world.listener.MyListener.consume(org.apache.kafka.clients.consumer.ConsumerRecord<java.lang.Object,
> ....)' threw
> exception; nested exception is
> com.hello.world.somepackage.exceptions.UnhappyException:
> Animal id 4444 is Unhappy
我們的應用程序將嘗試再次處理消息(如果發生異常),並且在某些時候消息將落在死信主題中,或者被處理。 不幸的是,由於我們當前的架構,我們的服務中通常不存在動物 ID,因此它可能會拋出幾次異常,直到它被處理。
該消息被記錄為“錯誤”,並在 Sentry 警報平台中創建“錯誤”警報。
有沒有辦法將錯誤 UnHappyException 更改為警告級別,而無需更改哨兵配置?
我試圖查看 ConcurrentKafkaListenerContainerFactory 並查看是否可以傳入自定義錯誤處理程序,但它根本沒有達到斷點。
@Bean
public ConcurrentKafkaListenerContainerFactory<Object, Object> kafkaListenerContainerFactory(
ConsumerFactory<Object, Object> consumerFactory,
KafkaTemplate<String, Object> kafkaTemplate) {
ConcurrentKafkaListenerContainerFactory<Object, Object> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory);
/*
// Original implementation
factory.setCommonErrorHandler(new DefaultErrorHandler(
new DeadLetterPublishingRecoverer(kafkaTemplate), backOff));
*/
// here I created CustomErrorHandler and tried to extend DefaultErrorHandler and override methods but they do not get hit by debugger at all.
factory.setCommonErrorHandler(new CustomErrorHandler(
new DeadLetterPublishingRecoverer(kafkaTemplate), backOff));
事實證明,可重試主題在遇到死信主題之前不會將錯誤記錄為異常,因此無需執行任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.