国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

RocketMQ消息重試機制解析!

開發(fā) 架構(gòu)
由于網(wǎng)絡(luò)抖動、服務(wù)宕機等一些不確定的因素,RocketMQ在發(fā)送消息的時候很有可能出現(xiàn)消息發(fā)送或者消費失敗的問題。

由于網(wǎng)絡(luò)抖動、服務(wù)宕機等一些不確定的因素,RocketMQ在發(fā)送消息的時候很有可能出現(xiàn)消息發(fā)送或者消費失敗的問題。

所以RocketMQ消息重試分為2種:

?Producer端重試和Consumer端重試。

Producer端重試

?生產(chǎn)者端的消息失敗,也就是Producer往MQ上發(fā)消息沒有發(fā)送成功。

  • 比如網(wǎng)絡(luò)抖動致使生產(chǎn)者發(fā)送消息到MQ失敗。

這種消息失敗重試可以手動設(shè)置發(fā)送失敗重試的次數(shù)。

producer.setRetryTimesWhenSendFailed(3);

官方說明

?Producer的send方法本身支持內(nèi)部重試。

重試邏輯:

  • 默認(rèn)至多重試2次。
  • 這個方法的總耗時時間不超過sendMsgTimeout設(shè)置的值,默認(rèn)10s。

如果本身向Broker發(fā)送消息產(chǎn)生超時異常,就不會再重試。

  • 以上策略也是在一定程度上保證了消息可以發(fā)送成功。

如果業(yè)務(wù)對消息可靠性要求比較高,建議增加相應(yīng)的重試邏輯:

  • 比如調(diào)用send同步方法發(fā)送失敗時,則嘗試將消息存儲到DB。
  • 然后由后臺線程定時重試,確保消息一定到達(dá)Broker。

重試策略

消息發(fā)送重試有三種策略:

?同步發(fā)送失敗策略、異步發(fā)送失敗策略和消息刷盤失敗策略。

同步發(fā)送失敗策略:

?普通消息,消息發(fā)送默認(rèn)采用round-robin策略(輪轉(zhuǎn))來選擇所發(fā)送到的隊列。

  • 如果發(fā)送失敗,默認(rèn)重試2次。

但在重試時是不會選擇上次發(fā)送失敗的Broker,而是選擇其它Broker。

DefaultMQProducer producer = new DefaultMQProducer("pg");
// 設(shè)置同步發(fā)送失敗時重試發(fā)送的次數(shù),默認(rèn)為2次
producer.setRetryTimesWhenSendFailed(3);
// 設(shè)置發(fā)送超時時限為5s,默認(rèn)10s
producer.setSendMsgTimeout(5000);

異步發(fā)送失敗策略:

?異步發(fā)送失敗重試時,異步重試不會選擇其他Broker,僅在當(dāng)前Broker上做重試。

  • 所以該策略無法保證消息不丟失。
DefaultMQProducer producer = new DefaultMQProducer("pg");
producer.setNamesrvAddr("rocketmqOS:9876");
// 指定異步發(fā)送失敗后不進(jìn)行重試發(fā)送
producer.setRetryTimesWhenSendAsyncFailed(0);

消息刷盤失敗策略:

?消息刷盤超時,默認(rèn)是不會將消息嘗試發(fā)送到其他Broker。

對于重要消息可以通過在Broker的配置文件設(shè)置retryAnotherBrokerWhenNotStoreOK屬性為true來開啟。

幾種情況

異步發(fā)送在發(fā)送過程中出現(xiàn)異常進(jìn)行重試:

?在解析請求結(jié)果時,發(fā)現(xiàn)響應(yīng)狀態(tài)碼有其它異常(消息可能未正確被Broker處理)會繼續(xù)進(jìn)行重試。

  • 重試依然選擇當(dāng)前Broker。

但是如果響應(yīng)結(jié)果不為空的話,即使處理響應(yīng)時發(fā)生異常也不會進(jìn)行重試。

同步發(fā)送時:

?如果發(fā)送過程中沒有異常,但是發(fā)送結(jié)果不OK,也會選擇另一個Broker繼續(xù)進(jìn)行重試。

順序消息發(fā)送失敗不進(jìn)行重試:

?順序消息:指的是同步+指定消息隊列的方式發(fā)送。

Consumer端重試

消息正常的到了消費者,結(jié)果消費者發(fā)生異常,處理失敗了。

?例如反序列化失敗,消息數(shù)據(jù)本身無法處理等。

順序消息

順序消息的消費重試

?順序消息,當(dāng)Consumer消費消息失敗后,為了保證消息的順序性,其會自動不斷地進(jìn)行消息重試,直到消費成功。

  • 消費重試默認(rèn)間隔時間為1000ms。

重試期間應(yīng)用會出現(xiàn)消息消費被阻塞的情況。

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("cg");
// 順序消息消費失敗的消費重試時間間隔,單位毫秒,默認(rèn)為1000,其取值范圍為[10, 30000]
consumer.setSuspendCurrentQueueTimeMillis(100);

由于對順序消息的重試是無休止的,不間斷的,直至消費成功。

  • 所以,對于順序消息的消費,務(wù)必要保證應(yīng)用能夠及時監(jiān)控并處理消費失敗的情況,避免消費被永久性阻塞。

?注意:順序消息沒有發(fā)送失敗重試機制,但具有消費失敗重試機制。

消費狀態(tài)

?順序消費目前兩個狀態(tài):SUCCESS和SUSPEND_CURRENT_QUEUE_A_MOMENT。

SUSPEND_CURRENT_QUEUE_A_MOMENT意思是先暫停消費一下:

  • 過SuspendCurrentQueueTimeMillis時間間隔后再重試一下,而不是放到重試隊列里。
public enum ConsumeOrderlyStatus {
    SUCCESS,
    
    @Deprecated
    ROLLBACK,
    
    @Deprecated
    COMMIT,
    
    SUSPEND_CURRENT_QUEUE_A_MOMENT;
}

并發(fā)消息

并發(fā)消息的消費重試

?在并發(fā)消費中,可能會有多個線程同時消費一個隊列的消息。

因此即使發(fā)送端通過發(fā)送順序消息保證消息在同一個隊列中按照FIFO的順序,也無法保證消息實際被順序消費。

  • 所有并發(fā)消費也可以稱之為無序消費。

對于無序消息(普通消息、延時消息、事務(wù)消息):

  • 當(dāng)Consumer消費消息失敗時,可以通過設(shè)置返回狀態(tài)達(dá)到消息重試的效果。

注意:

?無序消息的重試只針對集群消費模式生效。

廣播消費模式不提供失敗重試特性:即消費失敗后,失敗消息不再重試,繼續(xù)消費新的消息。

消費狀態(tài)

Consumer端消息消費有兩種狀態(tài):

?一個是成功(CONSUME_SUCCESS),一個是失敗&稍后重試(RECONSUME_LATER)。

Consumer為了保證消息消費成功,只有使用方明確表示消費成功。

  • 返回CONSUME_SUCCESS,RocketMQ才會認(rèn)為消息消費成功。

若是消息消費失敗,只要返回:ConsumeConcurrentlyStatus.RECONSUME_LATER。

  • RocketMQ就會認(rèn)為消息消費失敗了,要重新投遞。
public enum ConsumeConcurrentlyStatus {
    CONSUME_SUCCESS,
    RECONSUME_LATER;   
}

重試機制

?為了保證消息是確定被至少消費成功一次,RocketMQ會把這批消息重發(fā)回Broker。

  • Topic不是原Topic而是一個RETRY Topic。

在延遲的某個時間點(默認(rèn)是10秒,業(yè)務(wù)可設(shè)置)后,再次投遞。

?而若是一直這樣重復(fù)消費都持續(xù)失敗到必定次數(shù)(默認(rèn)16次),就會投遞到死信隊列

在啟動Broker的過程當(dāng)中,能夠觀察到以下輸出:

2024-09-19 16:29:58 INFO main - messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

RECONSUME_LATER策略:

?若是消費失敗,那么1S后再次消費,若是失敗,那么5S后,再次消費,…… 直至2H后若是消費還失敗。

  • 那么該條消息就會終止發(fā)送給消費者了。

消息重試間隔時間如下:

重試次數(shù)

與上次重試的間隔時間

重試次數(shù)

與上次重試的間隔時間

1

10秒

9

7分鐘

2

30秒

10

8分鐘

3

1分鐘

11

9分鐘

4

2分鐘

12

10分鐘

5

3分鐘

13

20分鐘

6

4分鐘

14

30分鐘

7

5分鐘

15

1小時

8

6分鐘

16

2小時

?某條消息在一直消費失敗的前提下,將會在接下來的4小時46分鐘之內(nèi)進(jìn)行16次重試。

  • 超過這個時間范圍消息將不再重試投遞,而被投遞至死信隊列

修改消費重試次數(shù):

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("cg");
// 修改消費重試次數(shù)
consumer.setMaxReconsumeTimes(10);

基本原理

?重試的 Message,RocketMQ 的做法并不是將其投遞回原 Topic重試隊列。

每個 ConsumerGroup 都有自己的重試隊列:

  • 其名稱是由特定的前綴拼接上 ConsumerGroup 所組成,默認(rèn) %RETRY%+消費者組名稱。
  • 所以在 Consumer 啟動時,就會同時消費其 ConsumerGroup 對應(yīng)的重試隊列和普通隊列。

消費失敗的 Message,Consumer 會將其投回 Broker:

  • 相當(dāng)于這條 Message 已經(jīng)被消費掉了,之后重試的只是內(nèi)容相同、但實際不是同一條的 Message。
  • 然后會校驗重試的次數(shù),如果達(dá)到16次則會進(jìn)入死信隊列 ,組成為 %DLQ%+消費者組名稱。
  • 未達(dá)到最大重試次數(shù),則會根據(jù)重試間隔時間等級將其投遞到延遲隊列SCHEDULE_TOPIC_XXXX中。
  • 然后等到了延遲等級對應(yīng)的時間之后,再投遞到 ConsumerGroup 所對應(yīng)的重試隊列當(dāng)中,供后續(xù)消費。

消息重復(fù)

如果消費端收到兩條一樣的消息,應(yīng)該怎樣處理?

《RocketMQ 原理簡介》中講到:

?RocketMQ 無法避免消息重復(fù)。

所以如果業(yè)務(wù)對消費重復(fù)非常敏感,務(wù)必要在業(yè)務(wù)側(cè)去重,有以下幾種去重方式:

?

消費端處理消息的業(yè)務(wù)邏輯保持冪等性。

  • 如何保證冪等性,可以看我之前的文章!

保證每條消息都有唯一編號且保證消息處理成功與去重表的日志同時出現(xiàn)。

  • 利用一張日志表來記錄已經(jīng)處理成功的消息的ID。
  • 如果新到的消息ID已經(jīng)在日志表中,那么就不再處理這條消息。
責(zé)任編輯:姜華 來源: 月伴飛魚
相關(guān)推薦

2025-01-03 08:44:37

kafka消息發(fā)送策略

2022-11-14 08:19:59

重試機制Kafka

2022-05-06 07:44:10

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

2021-02-20 10:02:22

Spring重試機制Java

2017-06-16 15:16:15

2017-07-02 16:50:21

2025-02-26 10:49:14

2020-07-19 15:39:37

Python開發(fā)工具

2023-10-27 08:20:12

springboot微服務(wù)

2023-11-27 07:44:59

RabbitMQ機制

2024-10-29 08:34:27

RocketMQ消息類型事務(wù)消息

2024-11-11 13:28:11

RocketMQ消息類型FIFO

2025-12-03 00:57:00

2023-11-06 08:00:38

接口高可用機制

2024-11-14 09:10:13

消費者RocketMQ負(fù)載均衡

2025-05-28 01:15:00

Golang重試機制

2025-09-30 01:55:00

SpringWebClientHTTP

2024-08-22 18:49:23

2025-04-18 03:00:00

2024-01-04 18:01:55

高并發(fā)SpringBoot
點贊
收藏

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

jizzjizz亚洲中国少妇| 992tv成人国产福利在线| 国产成人高清精品免费5388| 色8久久人人97超碰香蕉987| 欧美国产视频在线观看| 亚洲精品高潮| 亚洲精品一区二区精华| 午夜av电影| 成人免费毛片app| 好吊色欧美一区二区三区| 欧美一性一交| www.欧美免费| 麻豆蜜桃在线| 欧美午夜影院一区| 免费播放av| 欧美激情在线一区二区| 青青视频免费在线| 另类激情亚洲| www.久久久| 国产欧美日韩视频在线| 久久综合色影院| 成人免费看黄| 精品剧情v国产在线观看在线| 在线视频您懂的| 亚洲婷婷在线视频| 97av视频在线观看| 成人性色生活片免费看爆迷你毛片| 欧美日韩国产免费一区二区三区 | 日韩欧美你懂的| 在线免费一区| 精品日本视频| 国产精品亚洲综合久久| 国产欧美中文字幕| 欧美美女黄色| 亚洲91av视频| 久久综合五月婷婷| 欧美激情综合色| 欧美一级黑人aaaaaaa做受| 国产乱人伦精品一区二区三区| 国产欧美欧美| 国产欧美丝袜| 亚洲二区精品| 国产亚洲精品久久飘花| 欧美日本不卡高清| 国产精品免费一区二区| 91精品99| 国产精品嫩草在线观看| 午夜久久黄色| 久久99久久精品国产| 日韩午夜黄色| 日本高清不卡一区二区三| 久久久www| 欧美日韩视频免费在线观看| 久久成人18免费观看| 91香蕉视频网址| 粉嫩aⅴ一区二区三区四区| 手机看片日韩国产| 国产乱对白刺激视频不卡| 日本阿v视频在线观看| 国产精品夜夜爽| 国产一二三区在线播放| 99久久婷婷国产综合精品| 日韩免费毛片视频| 日韩毛片精品高清免费| 又黄又www的网站| 欧美视频裸体精品| 精品视频在线一区二区| 亚洲美女av电影| 国产精品色婷婷在线观看| 51色欧美片视频在线观看| 精品免费在线| 欧美日韩一区二区三| 成人午夜碰碰视频| av五月婷婷| 欧美日韩精品一区二区三区蜜桃| wwwav在线| 日韩在线高清视频| 国产欧美一区二区三区精品观看| 国产精品一区二区三区精品| 日本亚洲天堂网| 国产96在线 | 亚洲| 日本一区二区在线不卡| 最色在线观看| 欧美一卡二卡三卡| 四虎影视国产精品| 国产精品在线看| 欧美96一区二区免费视频| 日本xxxxxxxxxx75| 精品久久久久久久大神国产| 欧美xxxx做受欧美88bbw| 美女av一区二区| 欧美日本不卡| 日本日本19xxxⅹhd乱影响| 亚洲综合丁香婷婷六月香| 国产精品186在线观看在线播放| 久久91超碰青草是什么| 国内综合精品午夜久久资源| 韩国无码av片在线观看网站| 亚洲一区二区三区四区在线观看| 超碰97国产精品人人cao| 性欧美长视频免费观看不卡| 亚洲精品乱码久久久久久蜜桃麻豆| 欧洲精品视频在线| 欧美日韩午夜激情| 久久久久伊人| 久久www免费人成精品| 国产亚洲精品资源在线26u| yourporn在线观看视频| 欧美黄色www| 丝瓜av网站精品一区二区| 成人黄色电影在线| 日韩成人免费视频| 国产亚洲电影| 黄色大片中文字幕| 69堂国产成人免费视频| 国产伦精品一区二区三区在线播放 | 国产视频久久久久| 久久国产电影| 无码人妻精品一区二区三区在线| 在线免费观看日本欧美| 粉嫩的18在线观看极品精品| 久久av一区二区三区亚洲| 亚洲人成在线观看一区二区| 成人天堂yy6080亚洲高清| 国产伦精品一区二区三区在线| 国产精品视频第一区| 午夜视频国产| 精品这里只有精品| 亚洲综合图片区| 亚洲一区bb| 欧美激情一区二区在线| 日韩高清电影一区| 亚洲青青青在线视频| 欧美日韩激情一区二区三区| 国产视频在线一区二区| 中文字幕欧美日韩精品| 日本中文字幕不卡免费| 中日韩午夜理伦电影免费| 卡通动漫精品一区二区三区| 91亚洲天堂| 中文字幕在线资源| 久久伦理网站| 99国产超薄丝袜足j在线观看| 91精品国产91久久久久久不卡 | 国产精品电影一区二区三区| 久久精品盗摄| 高清一区二区三区| 久久不卡日韩美女| 日本三级一区| 日本成a人片在线观看| 亚洲人av在线| 日漫免费在线观看网站| 欧美精品videosex| 亚洲久久中文字幕| 亚洲精品无人区| 欧美色图色综合| 伊大人久久香线焦宗合一75大| 成人av小说网| 每日更新av在线播放| 成人在线观看网站| 黄页视频在线观看| 一呦二呦三呦精品国产| 国产日产一区二区三区| 成人亚洲一区二区三区| 制服丝袜影音| www.国产精品.com| 日本乱码一区二区三区不卡| 久久免费资源| 婷婷亚洲最大| 亚洲欧美成人| 久久免费看少妇高潮| 亚洲欧美激情小说另类| 在线不卡的av| 亚洲一级片在线看| 国产精品免费小视频| 日本在线高清视频一区| 精品一二三四五区| 青青久在线视频| 精品久久亚洲| 伊人久久成人| 国产精品国产成人国产三级 | 日韩av电影手机在线| 亚洲成人第一| 亚洲美女在线免费观看| 在线免费三级电影网站| 色777狠狠狠综合伊人| 国产成人免费xxxxxxxx| 五月天欧美精品| 久久天天躁狠狠躁夜夜躁2014| 国产99在线免费| 校园春色影音先锋| 天堂综合在线播放| 久久精品卡一| 欧美日韩国产丝袜另类| 午夜精品久久久久久久男人的天堂| 性欧美精品一区二区三区在线播放| 特黄特色特刺激视频免费播放| 日韩精品亚洲专区在线观看| 国产中文一区二区三区| 精品久久久久久无|
<code id="nfd8a"></code>