精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

RocketMQ如何保證消息的可靠性投遞?

開發 架構
對于順序消息,當消費者消費消息失敗后,消息隊列RocketMQ版會自動不斷地進行消息重試(每次間隔時間為1秒),這時,應用會出現消息消費被阻塞的情況。

[[396087]]

介紹

要想保證消息的可靠型投遞,無非保證如下3個階段的正常執行即可。

  1. 生產者將消息成功投遞到broker
  2. broker將投遞過程的消息持久化下來
  3. 消費者能從broker消費到消息

發送端消息重試

producer向broker發送消息后,沒有收到broker的ack時,rocketmq會自動重試。重試的次數可以設置,默認為2次

  1. DefaultMQProducer producer = new DefaultMQProducer(RPODUCER_GROUP_NAME); 
  2. // 同步發送設置重試次數為5次 
  3. producer.setRetryTimesWhenSendFailed(5); 
  4. // 異步發送設置重試次數為5次 
  5. producer.setRetryTimesWhenSendAsyncFailed(5); 

消息持久化

我們先來了解一下消息的存儲流程,這個知識對后面分析消費端消息重試非常重要。

和消息相關的文件有如下幾種

  1. CommitLog:存儲消息的元數據
  2. ConsumerQueue:存儲消息在CommitLog的索引
  3. IndexFile:可以通過Message Key,時間區間快速查找到消息

整個消息的存儲流程如下

  1. Producer將消息順序寫到CommitLog中
  2. 有一個線程根據消息的隊列信息,寫入到相關的ConsumerQueue中(minOffset為寫入的初始位置,consumerOffset為當前消費到的位置,maxOffset為ConsumerQueue最新寫入的位置)和IndexFile
  3. Consumer從ConsumerQueue的consumerOffset讀取到當前應該消費的消息在CommitLog中的偏移量,到CommitLog中找到對應的消息,消費成功后移動consumerOffset

刷盤機制

「異步刷盤」:消息被寫入內存的PAGECACHE,返回寫成功狀態,當內存里的消息量積累到一定程度時,統一觸發寫磁盤操作,快速寫入 。吞吐量高,當磁盤損壞時,會丟失消息

「同步刷盤」:消息寫入內存的PAGECACHE后,立刻通知刷盤線程刷盤,然后等待刷盤完成,刷盤線程執行完成后喚醒等待的線程,給應用返回消息寫成功的狀態。吞吐量低,但不會造成消息丟失

主從復制

如果一個broker有master和slave時,就需要將master上的消息復制到slave上,復制的方式有兩種

  1. 「同步復制」:master和slave均寫成功,才返回客戶端成功。maste掛了以后可以保證數據不丟失,但是同步復制會增加數據寫入延遲,降低吞吐量
  2. 「異步復制」:master寫成功,返回客戶端成功。擁有較低的延遲和較高的吞吐量,但是當master出現故障后,有可能造成數據丟失

消費端消息重試

順序消息的重試

對于順序消息,當消費者消費消息失敗后,消息隊列RocketMQ版會自動不斷地進行消息重試(每次間隔時間為1秒),這時,應用會出現消息消費被阻塞的情況。所以一定要做好監控,避免阻塞現象的發生

「順序消息消費失敗后不會消費下一條消息而是不斷重試這條消息,應該是考慮到如果跨過這條消息消費后面的消息會對業務邏輯產生影響」

「順序消息暫時僅支持集群消費模式,不支持廣播消費模式」

無序消息的重試

對于無序消息(普通、定時、延時、事務消息),當消費者消費消息失敗時,您可以通過設置返回狀態達到消息重試的結果。

「無序消息的重試只針對集群消費方式生效;廣播方式不提供失敗重試特性,即消費失敗后,失敗消息不再重試,繼續消費新的消息」

「消費時候后,重試的配置方式有如下三種」

  1. 返回Action.ReconsumeLater(推薦)
  2. 返回Null
  3. 拋出異常
  1. public class MessageListenerImpl implements MessageListener { 
  2.  
  3.     @Override 
  4.     public Action consume(Message message, ConsumeContext context) { 
  5.         //消息處理邏輯拋出異常,消息將重試。 
  6.         doConsumeMessage(message); 
  7.         //方式1:返回Action.ReconsumeLater,消息將重試。 
  8.         return Action.ReconsumeLater; 
  9.         //方式2:返回null,消息將重試。 
  10.         return null
  11.         //方式3:直接拋出異常,消息將重試。 
  12.         throw new RuntimeException("Consumer Message exception"); 
  13.     } 

「消費失敗后,無需重試的配置方式」

集群消費方式下,消息失敗后期望消息不重試,需要捕獲消費邏輯中可能拋出的異常,最終返回Action.CommitMessage,此后這條消息將不會再重試。

  1. public class MessageListenerImpl implements MessageListener { 
  2.  
  3.     @Override 
  4.     public Action consume(Message message, ConsumeContext context) { 
  5.         try { 
  6.             doConsumeMessage(message); 
  7.         } catch (Throwable e) { 
  8.             //捕獲消費邏輯中的所有異常,并返回Action.CommitMessage; 
  9.             return Action.CommitMessage; 
  10.         } 
  11.         //消息處理正常,直接返回Action.CommitMessage; 
  12.         return Action.CommitMessage; 
  13.     } 

「消息重試次數」

「RocketMQ默認允許每條消息最多重試16次,每次消費失敗發送一條延時消息到重試隊列,同一條消息失敗一次將延時等級提高一次,然后再放到重試隊列。重試16次后如果還沒有消費成功,則將消息放到死信隊列中。」

「注意:重試隊列和死信隊列都是按照Consumer Group劃分的」

重試隊列topic名字:%RETRY% + consumerGroup

死信隊列topic名字:%DLQ% + consumerGroup

「為什么重試隊列和死信隊列要按照Consumer Group來進行劃分?」

「因為在RocketMQ的時候使用一定要保持訂閱關系一致。即一個Consumer Group訂閱的topic和tag要完全一致,不然可能會導致消費邏輯混亂,消息丟失」

如下任意一種情況都表現為訂閱關系不一致

  • 相同ConsumerGroup下的Consumer實例訂閱了不同的Topic。
  • 相同ConsumerGroup下的Consumer實例訂閱了相同的Topic,但訂閱的Tag不一致。

我們可以通過控制臺查看各種類型的主題

消息每次重試的間隔時間如下

第幾次重試 與上次重試的間隔時間 第幾次重試 與上次重試的間隔時間

第幾次重試 與上次重試的間隔時間 第幾次重試 與上次重試的間隔時間
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 小時

「前面說到RocketMQ的消息重試是通過往重試隊列發送定時消息來實現的。」 RocketMQ支持18個級別的定時延時,每個級別定時消息的延時時間如下。

  1. // MessageStoreConfig.java 
  2. private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h"

消息重試只是把定時消息的前2個級別去掉,每次發送下一個級別的定時消息

我們可以設置消費端消息重試次數

  1. 最大重試次數小于等于16次,則重試時間間隔同上表描述。
  2. 最大重試次數大于16次,超過16次的重試時間間隔均為每次2小時。
  1. Properties properties = new Properties(); 
  2. // 配置對應Group ID的最大消息重試次數為20次,最大重試次數為字符串類型。 
  3. properties.put(PropertyKeyConst.MaxReconsumeTimes,"20"); 
  4. Consumer consumer =ONSFactory.createConsumer(properties); 

「那么重試隊列中的消息是如何被消費的?」

消息消費者在啟動的時候,會訂閱正常的topic和重試隊列的topic

定時消息的實現邏輯也比較簡單,可以歸納為如下幾步

1.發送延時消息

1.1 替換topic為SCHEDULE_TOPIC_XXXX,queueId為消息延遲等級(如果不替換topic直接發到對應的consumeQueue中,則消息會被立馬消費)

1.2 將消息原來的topic,queueId放到消息擴展屬性中

1.3 將消息應該執行的時間放到tagsCode中

將消息順序寫到CommitLog中

將消息對應的信息分發到對應的ConsumerQueue中(topic為SCHEDULE_TOPIC_XXXX總共有18個queue,對應18個延遲級別)

定時任務不斷判斷消息是否到達投遞時間,沒有到達則后續執行投遞

如果到達投遞時間,則從commitLog中拉取消息的內容,重新設置消息topic,queueId為原來的(原來的topic,queueId在消息擴展屬性中),然后將消息投遞到commitLog中,此時消息就會被分發到對應的隊列中,然后被消費。

本文轉載自微信公眾號「Java識堂」,可以通過以下二維碼關注。轉載本文請聯系Java識堂公眾號。

 

責任編輯:武曉燕 來源: Java識堂
相關推薦

2021-02-02 11:01:31

RocketMQ消息分布式

2024-05-09 08:04:23

RabbitMQ消息可靠性

2020-10-14 08:36:10

RabbitMQ消息

2023-03-06 08:16:04

SpringRabbitMQ

2023-10-17 16:30:00

TCP

2017-08-21 08:51:22

CAN網絡通訊

2010-12-28 19:50:21

可靠性產品可靠性

2018-09-27 14:13:27

云服務可靠故障

2024-02-28 10:26:04

物聯網數據存儲

2024-07-04 12:36:50

2011-06-20 14:21:01

模塊化數據中心IT基礎設施

2019-07-26 08:00:00

微服務架構

2021-03-04 06:49:53

RocketMQ事務

2022-03-07 08:13:06

MQ消息可靠性異步通訊

2009-12-17 16:20:20

城域網路由器

2019-08-30 12:10:05

磁盤數據可靠性RAID

2020-12-06 14:51:23

物聯網可靠性IOT

2010-12-28 19:55:20

軟件架構可靠性

2010-07-28 18:58:54

東海證券負載均衡Array Netwo

2010-12-28 20:04:10

網絡的可靠性網絡解決方案可靠性
點贊
收藏

51CTO技術棧公眾號

国产综合视频在线观看| 国产午夜精品免费一区二区三区| 成年丰满熟妇午夜免费视频| 亚洲精品国产精品乱码不卡| 先锋影音久久久| 最近的2019中文字幕免费一页 | 久久精品日产第一区二区三区乱码| 最新中文字幕一区| 一区二区中文| 亚洲天堂免费在线| 天天爽夜夜爽视频| 日韩天堂在线| 亚洲韩国精品一区| 亚洲欧洲免费无码| 天天操天天干天天爱| 久久国产免费看| 欧美夫妻性视频| 女人黄色一级片| 开心激情综合| 777亚洲妇女| 成人在线看视频| 国产极品人妖在线观看| 中文一区在线播放| 久久九九视频| 亚洲国产一二三区| 久久99精品久久只有精品| 欧美野外猛男的大粗鳮| 久久久精品视频免费观看| 欧美综合一区| 亚洲精品二三区| 波多野结衣免费观看| 亚洲第一会所001| 亚洲成人激情自拍| 欧洲美女和动交zoz0z| 国产高清视频免费最新在线| 99精品视频在线免费观看| 亚洲a在线观看| 中文字幕乱码人妻无码久久| 午夜在线播放视频欧美| 91国偷自产一区二区三区的观看方式| 一区二区视频免费看| 成人羞羞视频播放网站| 亚洲精品网址在线观看| 天堂久久久久久| 免费看成人人体视频| 亚洲а∨天堂久久精品9966| 丰满饥渴老女人hd| 深夜福利一区| 日韩手机在线导航| 免费高清视频在线观看| 91国产精品| 欧美一区二区二区| 香蕉视频xxx| 一本一道久久a久久| 日韩欧美国产三级| 国产又粗又猛又爽又黄| 亚洲伊人精品酒店| 欧美一级在线免费| 中文字幕乱妇无码av在线| 亚洲性视频在线| 精品国产免费一区二区三区香蕉| 国产精品二区视频| 红杏aⅴ成人免费视频| 亚洲成人激情图| 欧美xxxxx精品| 日韩理论电影中文字幕| 亚洲另类xxxx| 成人在线观看免费高清| 91久久国产| 久久大大胆人体| 免费在线观看日韩| 日韩香蕉视频| 国产福利成人在线| 国产精品久久久久久久久久久久久久久久久久 | www.欧美精品一二三区| 中文字幕在线有码| 好看的亚洲午夜视频在线| 国内精品免费午夜毛片| 亚洲精品成人在线视频| 麻豆久久久久久| 2014国产精品| 午夜视频www| 国产精品无人区| 伊人再见免费在线观看高清版| caoporn视频在线观看| 色老汉一区二区三区| 毛片毛片毛片毛| xxxx日韩| 最近的2019中文字幕免费一页| 欧美日韩在线视频免费| 性色一区二区三区| 成人在线中文字幕| 神马久久久久久久久久| 欧美国产精品劲爆| 老司机激情视频| 丝袜美腿一区| 日韩免费一区二区| 自拍偷拍视频亚洲| 欧美天天在线| 国产精品丝袜久久久久久高清 | av电影一区二区三区| 国产剧情av在线播放| 欧美性色黄大片| 成人欧美精品一区二区| 成人无号精品一区二区三区| 97欧美精品一区二区三区| 亚洲熟女乱色一区二区三区久久久| 国产成人在线网站| 亚洲精品乱码久久久久久蜜桃91| 川上优av中文字幕一区二区| 9191成人精品久久| 久操视频免费看| 91精品国偷自产在线电影 | 中文字幕日韩在线观看| 久草精品视频在线观看| 久久超碰97中文字幕| 美媛馆国产精品一区二区| 成码无人av片在线观看网站| 色婷婷亚洲综合| xxxwww国产| 欧美一区亚洲| 国产日韩在线免费| 国产三级在线看| 午夜久久久久久电影| 国产999免费视频| 91综合网人人| 国产激情久久久久| 天堂成人在线| 亚洲成a天堂v人片| 精产国品一区二区三区| 亚洲自拍偷拍网| 成人精品视频99在线观看免费 | 欧美激情a∨在线视频播放| 中文字幕一区2区3区| 久久午夜羞羞影院免费观看| 丝袜人妻一区二区三区| 亚洲日本视频在线| 欧美成人一二三| 国产视频一区二区三区四区五区| 国产精品二三区| 亚洲免费看av| 久久不卡国产精品一区二区| 欧美在线视频网站| 爽爽视频在线观看| 日韩欧美高清视频| 久久丫精品国产亚洲av不卡 | 青青在线视频免费| 羞羞答答一区二区| 日韩美女免费观看| 日韩三级电影网| 欧美午夜激情小视频| 国产精品无码电影| 国产一区二区三区的电影| 国偷自产av一区二区三区小尤奈| a国产在线视频| 亚洲精品久久在线| 男人日女人网站| 久久久亚洲午夜电影| 国产成人a亚洲精v品无码| 偷窥自拍亚洲色图精选| 欧美性受xxxx黑人猛交| 欧美zozo| 欧美丝袜丝nylons| www久久久久久久| 久久福利视频一区二区| 久久av秘一区二区三区| 欧美视频二区欧美影视| 欧美激情一区二区三区久久久| 黑人精品一区二区| 狠狠躁夜夜躁人人爽超碰91| 成人在线一级片| 麻豆成人综合网| 成人午夜免费剧场| 国产美女撒尿一区二区| 日本精品视频在线| 永久免费在线观看视频| 日韩精品专区在线影院重磅| 日本一本高清视频| 国产三级三级三级精品8ⅰ区| 国产成人精品无码播放| 99久久亚洲精品蜜臀| 97久久夜色精品国产九色 | 精品国产户外野外| 亚洲最大成人综合网| 国产黄色91视频| 浮妇高潮喷白浆视频| 国产中文字幕一区二区三区| 成人午夜两性视频| 秋霞伦理一区| 久久精品亚洲热| 免费观看国产视频| 欧美视频一区在线观看| 久久久精品99| 国产亚洲欧美日韩日本| 四虎国产精品免费| 肉丝袜脚交视频一区二区| 400部精品国偷自产在线观看| 欧美三级午夜理伦三级在线观看| 国产精品久久久久影院日本| 免费毛片在线看片免费丝瓜视频| 一本一本久久a久久精品综合小说| 国产99999| 在线观看一区日韩| 精品在线免费观看视频| 国产精品久久久久永久免费观看| 你懂的在线观看网站| 另类成人小视频在线| 九色在线视频观看| 亚洲成av人电影| 欧美一二三区| 国产乱人伦丫前精品视频| 成人久久18免费网站图片| 六月婷婷综合| 久久久久女教师免费一区| 超碰免费在线| 亚洲另类欧美自拍| 色呦呦中文字幕| 欧美一区二区精美| 国产精品久久久午夜夜伦鲁鲁| 欧美性高潮床叫视频| 久久国产在线视频| 亚洲天堂免费看| 蜜桃传媒一区二区亚洲| 97国产一区二区| 久久久久亚洲av无码网站| 精品一区二区三区在线观看 | 国产亚洲精品女人久久久久久| 国产精品久久三| 国产美女永久免费无遮挡| 99久久精品国产一区二区三区 | 日韩在线视频免费观看| 蝌蚪视频在线播放| 亚洲电影免费观看| 亚洲精品一区二区三区四区 | 五月婷中文字幕| 精品国产91久久久久久久妲己 | 国产一区二区精品久久91| 国产一区二区在线免费播放| 久久精品亚洲| 国产真实乱子伦| 免费日韩av| 欧美aⅴ在线观看| 久久国产精品亚洲77777| 99热在线这里只有精品| 一本色道久久综合| 精品人妻一区二区三区四区在线| 日韩视频在线一区二区三区 | 欧美三级小视频| 亚洲伦理在线精品| 91日韩中文字幕| 一区二区视频在线看| 欧美成人免费看| 亚洲亚洲精品在线观看| 精品无码人妻一区二区三区品| 亚洲一区二区三区爽爽爽爽爽| 免费人成视频在线| 亚洲444eee在线观看| 国内免费精品视频| 欧美香蕉大胸在线视频观看| 国产美女激情视频| 在线看不卡av| 91麻豆一区二区| 日韩欧美电影一二三| 日本精品一二区| 亚洲女人天堂成人av在线| 蜜芽tv福利在线视频| 中文字幕欧美专区| av官网在线播放| 欧美极品在线播放| 天堂√中文最新版在线| 国产精品高精视频免费| 欧美日韩破处视频| 99精彩视频在线观看免费| 精品精品国产毛片在线看| 欧美日韩另类综合| 99国产精品一区二区| 国产精品国三级国产av| 西西人体一区二区| 中文字幕在线视频一区二区三区| 国产精品123| 亚洲av无码一区二区二三区| 国产精品美女久久久久久久久| 青青草偷拍视频| 欧美性猛交xxxx乱大交极品| 一本色道久久综合无码人妻| 精品毛片乱码1区2区3区| 国产在线观看高清视频| 久久精品亚洲一区| 黑人精品一区| 91在线在线观看| 国产成人三级| 青青草视频国产| 日本系列欧美系列| 国产一级免费片| 国产精品毛片高清在线完整版| 久青草视频在线观看| 欧美色偷偷大香| 成人久久久精品国产乱码一区二区| 亚洲图片在线综合| 蜜桃成人365av| 国产精品丝袜久久久久久高清 | 亚洲精品乱码久久久久久蜜桃91| 伊人久久久大香线蕉综合直播| 亚洲一区二区蜜桃| 成人国产电影网| 亚洲熟女毛茸茸| 91久久线看在观草草青青| 丰满人妻熟女aⅴ一区| 久久精品国产2020观看福利| 中文字幕在线直播| 国产成人av一区二区三区| 日韩理论在线| 麻豆传传媒久久久爱| 成人国产精品免费观看动漫| 69av视频在线| 欧美最新大片在线看| 天堂在线资源网| 久久久久久高潮国产精品视| 91成人福利社区| 亚洲人一区二区| 久久天堂成人| 中文字幕在线观看的网站| 亚洲动漫第一页| 精品国产av一区二区三区| 中文字幕日韩在线观看| 欧洲成人一区| 欧美精品一区二区三区在线看午夜| 尤物在线精品| 国产人妖在线观看| 亚洲免费观看高清完整版在线观看熊| 欧美成人一区二区视频| 国产一区二区三区在线观看网站| 色戒汤唯在线| 国产一区二区无遮挡| 亚洲福利电影| 久久无码专区国产精品s| 亚洲精品菠萝久久久久久久| 国产一区二区在线视频观看| 色偷偷av一区二区三区| 久久91视频| 亚洲欧洲日韩精品| 美女国产一区二区三区| 在线观看亚洲大片短视频| 91成人免费电影| 国产98在线| 国产精自产拍久久久久久| 色琪琪久久se色| 国产三级生活片| 亚洲精品一卡二卡| 性一交一乱一精一晶| 欧美激情视频三区| 久久九九热re6这里有精品| 欧美激情 国产精品| 91蜜桃网址入口| 国产日韩久久久| 日韩视频免费大全中文字幕| 久久三级中文| 99在线免费视频观看| 91在线观看高清| 综合网在线观看| 久久久久国产精品一区三寸| 亚洲第一中文字幕在线观看| heyzo一区| 免费h精品视频在线播放| 三级一区在线视频先锋| 2017亚洲天堂| 91精品国产一区二区三区香蕉| 色老头在线观看| 国模一区二区三区私拍视频| 丝袜诱惑制服诱惑色一区在线观看| 日本一二三不卡视频| 欧美一区二区视频在线观看 | 国产视频一区二区三区在线播放| 国产欧美一区二区精品仙草咪| 91福利免费视频| 久久久久久久久电影| 妖精视频一区二区三区| 欧美第一页浮力影院| 一区二区三区在线视频免费 | 日韩中文字幕在线| 亚洲精品aⅴ| 精品99在线视频| 亚洲欧洲色图综合| 日本人妻丰满熟妇久久久久久| 国产精品久久久| 一区二区三区网站| www.中文字幕av| 91精品国产综合久久精品性色| 爱啪啪综合导航| 亚洲午夜高清视频| jiyouzz国产精品久久| 在线免费观看中文字幕| 欧美激情一区二区三区久久久| 精品久久电影| 国产成人av片| 在线观看亚洲精品视频| 欧美韩日亚洲| 亚洲精品一区二区三区四区五区| 国产成a人无v码亚洲福利| wwwwww在线观看|