中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MQ不丟消息究竟是怎么實現的

發布時間:2021-12-18 17:14:48 來源:億速云 閱讀:192 作者:柒染 欄目:互聯網科技

本篇文章為大家展示了MQ不丟消息究竟是怎么實現的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。


通過消息隊列(MsgQueue,MQ)發送任務和消息,萬一MQ重啟了怎么辦?能否保證MQ不丟消息?
今天就聊聊MQ的消息必達性架構與流程。
不丟消息,MQ架構設計的核心方向是什么?
MQ要想消息必達,架構上有兩個核心設計點:
(1)消息落地;
(2)消息超時、重傳、確認;

為了實現上述兩個核心點,MQ架構如何?
MQ不丟消息究竟是怎么實現的
上圖是一個MQ的核心架構圖,可以分為三大塊:
(1)發送方 -> 左側粉色部分;
(2)MQ核心集群 -> 中間藍色部分;
(3)接收方 -> 右側屎黃色部分;

粉色發送方又由兩部分構成:
(1)業務調用方;
(2)MQ-client-sender;
其中后者向前者提供了兩個核心API

(1)SendMsg(bytes[] msg);

(2)SendCallback();

藍色MQ核心集群又分為四個部分:

(1)MQ-server

(2)zk;

(3)db;

(4)管理后臺web;


黃色接收方也由兩部分構成:
(1)業務接收方;
(2)MQ-client-receiver;
其中后者向前者提供了兩個核心API

(1)RecvCallback(bytes[] msg);

(2)SendAck();

MQ是一個系統間解耦的利器,它能夠很好的解除發布訂閱者之間的耦合,它將上下游的消息投遞解耦成兩個部分,如架構圖中的1箭頭和2箭頭:

MQ不丟消息究竟是怎么實現的
箭頭1:發送方將消息投遞給MQ,上半場;
箭頭2:MQ將消息投遞給接收方,下半場;

MQ消息可靠投遞核心流程如何?
MQ既然將消息投遞拆成了上下半場,為了保證消息的可靠投遞,上下半場都必須保證消息必達。
MQ不丟消息究竟是怎么實現的
MQ消息投遞上半場,MQ-client-sender到MQ-server流程見上圖1-3:
(1)MQ-client將消息發送給MQ-server;
畫外音:此時業務方調用API:SendMsg。
(2)MQ-server將消息落地,落地后即為發送成功;
(3)MQ-server將應答發送給MQ-client;
畫外音:此時回調業務API:SendCallback。

MQ不丟消息究竟是怎么實現的
MQ消息投遞下半場,MQ-server到MQ-client-receiver流程見上圖4-6:
(4)MQ-server將消息發送給MQ-client;
畫外音:此時回調業務API:RecvCallback。
(5)MQ-client回復應答給MQ-server;
畫外音:此時業務方主動調用API:SendAck。
(6)MQ-server收到ack,將之前已經落地的消息刪除,完成消息的可靠投遞;

如果消息丟了怎么辦?
MQ消息投遞的上下半場,都可以出現消息丟失,為了保證消息可達性,MQ需要進行超時和重傳。

上半場如何實施超時與重傳?
MQ不丟消息究竟是怎么實現的
MQ上半場的1或者2或者3如果丟失或者超時,MQ-client-sender內的timer會重發消息,直到期望收到3,如果重傳N次后還未收到,則SendCallback回調發送失敗,需要注意的是,這個過程中MQ-server可能會收到同一條消息的多次重發。

下半場如何實施超時與重傳?
MQ不丟消息究竟是怎么實現的
MQ下半場的4或者5或者6如果丟失或者超時,MQ-server內的timer會重發消息,直到收到5并且成功執行6,這個過程可能會重發很多次消息。
畫外音:一般采用指數退避的策略,先隔x秒重發,2x秒重發,4x秒重發,以此類推。
需要注意的是,這個過程中MQ-client-receiver也可能會收到同一條消息的多次重發。
MQ是系統之間的解耦利器,MQ為了保證消息必達,架構設計方向為:
(1)消息收到先落地;
(2)消息超時、重傳、確認保證消息必達;

上述內容就是MQ不丟消息究竟是怎么實現的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

mq
AI

阳山县| 绵竹市| 安塞县| 兰溪市| 泉州市| 石楼县| 临泽县| 永寿县| 孝感市| 齐齐哈尔市| 岐山县| 菏泽市| 岢岚县| 南宁市| 汪清县| 弥渡县| 涿州市| 嘉禾县| 广元市| 陇西县| 孝义市| 阿鲁科尔沁旗| 拉萨市| 太白县| 满洲里市| 蛟河市| 隆化县| 平顶山市| 巩义市| 缙云县| 巨鹿县| 龙胜| 静宁县| 恩施市| 莆田市| 玉龙| 神农架林区| 沭阳县| 离岛区| 沾化县| 阿荣旗|