成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kafka的春天-重試機(jī)制

開發(fā) 架構(gòu)
最近業(yè)務(wù)上用到了Spring Kafka,所以系統(tǒng)性的探索了下Spring Kafka的各種用法,發(fā)現(xiàn)了很多實用的特性,下面介紹下Spring Kafka的消息重試機(jī)制。

哈嘍,大家好,我是指北君。

最近業(yè)務(wù)上用到了Spring Kafka,所以系統(tǒng)性的探索了下Spring Kafka的各種用法,發(fā)現(xiàn)了很多實用的特性,下面介紹下Spring Kafka的消息重試機(jī)制。

0. 前言

原生 Kafka 是不支持消息重試的。但是 Spring Kafka 2.7+ 封裝了 Retry Topic 這個功能。

1. @RetryableTopic

使用注解的方式啟用 Retry Topic,在 @KafkaListener 方法上添加 @RetryableTopic 即可:

@Slf4j
@Component
public class DemoConsumer {
@RetryableTopic
@KafkaListener(topics = "topic1", groupId = "group1")
public void onMsg(ConsumerRecord<String, String> record){
log.info("topic: {}", record.topic());
throw new RuntimeException("kafka exception");
}

}

這樣就開啟了 Spring Kafka 的消息重試機(jī)制:默認(rèn)重試 3 次,間隔為 1 秒。

我們在方法里模擬了拋出異常,運行后可以發(fā)現(xiàn)打印了 3 條日志,間隔時間大約為 1 秒,重試的topic為原topic加上后綴“-retry”

2022-11-12 12:14:10.230  INFO 1023 --- [ner#3-dlt-0-C-1] c.b.b.demo.retrytopic.KafkaListener: topic: topic1
2022-11-12 12:14:11.315 INFO 1023 --- [ner#3-dlt-0-C-1] c.b.b.demo.retrytopic.KafkaListener: topic: topic1-retry-0
2022-11-12 12:14:12.310 INFO 1023 --- [ner#3-dlt-0-C-1] c.b.b.demo.retrytopic.KafkaListener: topic: topic1-retry-1

2. DLT死信隊列

如果 3 次重試后依舊失敗,會將消息發(fā)送到 DLT,

默認(rèn)情況,消息被發(fā)送到死信隊列后,會輸出一條日志。

2022-11-12 12:14:13.324  INFO 1023 --- [ner#3-dlt-0-C-1] o.s.k.retrytopic.RetryTopicConfigurer    : Received message in dlt listener: topic1-dlt@233

DLT的topic為原topic加上后綴“-dlt”

我們可以使用@DltHandler注解來定義進(jìn)入死信隊列后的操作:

@DltHandler
public void dltHandler(ConsumerRecord<String, String> record){
log.info("topic:{}, key:{}, value:{}", record.topic(), record.key(), record.value());
}

3. 自定義@RetryableTopic

可以自定義重試次數(shù)、延遲時間、topic命名策略等等,支持使用 Spring EL 表達(dá)式讀取配置。

@Slf4j
@Component
public class DemoConsumer {
@RetryableTopic(
attempts = "4",
backoff = @Backoff(delay = "5000", multiplier = "2"),
fixedDelayTopicStrategy = FixedDelayStrategy.SINGLE_TOPIC
)
@KafkaListener(topics = "topic2", groupId = "group1")
public void onMsg2(ConsumerRecord<String, String> record){
log.info("topic: {}", record.topic());
throw new RuntimeException("kafka exception");
}

}

注解屬性說明:

attempts:重試次數(shù),默認(rèn)為3。

@Backoff delay:消費延遲時間,單位為毫秒。

@Backoff multiplier:延遲時間系數(shù),此例中 attempts = 4, delay = 5000, multiplier = 2 ,則間隔時間依次為5s、10s、20s、40s,最大延遲時間受 maxDelay 限制。

fixedDelayTopicStrategy:可選策略包括:SINGLE_TOPIC 、MULTIPLE_TOPICS

4. 配置類

以上介紹的是注解的方式,只對注解下的方法有效。如果想讓多個方法都用相同的消息重試配置,那么可以使用配置類方式:

@Bean
public RetryTopicConfiguration retryTopic(KafkaTemplate<String, String> template){
return RetryTopicConfigurationBuilder
.newInstance()
.maxAttempts(4)
.fixedBackOff(5000)
.includeTopic("topic1")
.create(template);
}

小結(jié)

以上就是Spring Kafka消息重試機(jī)制的簡單應(yīng)用~希望能夠幫助那些正在使用Spring Kafka或即將使用的人少走一些彎路、少踩一點坑。

責(zé)任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

2025-01-03 08:44:37

kafka消息發(fā)送策略

2024-09-25 08:32:05

2020-07-19 15:39:37

Python開發(fā)工具

2025-02-26 10:49:14

2021-02-20 10:02:22

Spring重試機(jī)制Java

2022-05-06 07:44:10

微服務(wù)系統(tǒng)設(shè)計重試機(jī)制

2023-10-27 08:20:12

springboot微服務(wù)

2017-07-02 16:50:21

2017-06-16 15:16:15

2023-11-27 07:44:59

RabbitMQ機(jī)制

2023-11-06 08:00:38

接口高可用機(jī)制

2025-05-28 01:15:00

Golang重試機(jī)制

2025-04-18 03:00:00

2024-01-04 18:01:55

高并發(fā)SpringBoot

2025-02-27 09:35:22

2024-09-30 08:30:37

2025-02-26 08:10:40

2024-08-27 09:05:45

2023-06-07 15:25:19

Kafka版本日志

2024-08-13 15:46:57

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲网站观看 | 中文字幕久久精品 | 亚洲一区在线日韩在线深爱 | 国产欧美精品一区二区 | 国产三级一区二区三区 | 伊人精品国产 | 久久一二三区 | 欧美天堂在线观看 | 久久久精品久久 | 亚洲免费视频播放 | 久久亚洲91 | 九九久久精品 | 欧美精品91 | 最新国产在线 | 美国黄色毛片 | 国产在线一区观看 | 欧美激情一区二区三级高清视频 | 北条麻妃视频在线观看 | 亚洲a一区二区 | 欧美一区二区三区在线观看 | 国产1区2区3区 | 91久久精品国产 | 91天堂网 | 成人h动漫亚洲一区二区 | 午夜精品一区二区三区在线视 | 在线91 | 精品国产欧美一区二区 | 四虎成人免费视频 | 久久国产精品视频免费看 | 久久乐国产精品 | 91资源在线| 99热热| 免费观看的av| 99精品久久久久久中文字幕 | 国产精品国产亚洲精品看不卡15 | 亚洲二区视频 | 久久久精品一区 | 亚洲天堂网站 | 日本 欧美 国产 | 亚洲国产成人精品一区二区 | 99精品国产一区二区三区 |