要想消息必達,架構(gòu)設(shè)計上有兩個核心設(shè)計點:如上圖所示,MQ的核心架構(gòu)圖分為三大塊:1. 發(fā)送方 -> 左側(cè)粉色部分;藍色MQ核心集群由MQ-server,zk,db,管理后臺web等一系列子系統(tǒng)組成。RecvCallback(bytes[] msg)MQ是一個系統(tǒng)間解耦的利器,它能夠很好的解除發(fā)布訂閱者之間的耦合,它將上下游的消息投遞解耦成兩個部分,如上述架構(gòu)圖中的箭頭1和箭頭2:MQ既然將消息投遞拆成了上下半場,為了保證消息的可靠投遞,上下半場都必須盡量保證消息必達。1. sender將消息發(fā)送給MQ-server;3. MQ-server回調(diào)sender;MQ上半場的123如果丟失或者超時,sender內(nèi)置的timer會重發(fā)消息,直到收到3。如果重傳N次后還未收到3,則SendCallback向業(yè)務(wù)方回調(diào)發(fā)送失敗。
?4. MQ-server回調(diào)reciever;5. reciever收到消息,處理業(yè)務(wù)邏輯,將ACK發(fā)送給MQ-server;
6. MQ-server收到ACK,將之前已經(jīng)落地的消息刪除,流程結(jié)束;MQ下半場的456如果丟失或者超時,MQ-server內(nèi)置的timer會重發(fā)消息,直到收到5并且成功執(zhí)行6。1. 定時重發(fā),每隔10秒發(fā)一次,直到超出次數(shù);2. 指數(shù)退避,先隔x秒重發(fā),2x秒重發(fā),4x秒重發(fā),以此類推;1. MQ是系統(tǒng)之間的解耦利器,它能解除消息發(fā)送方與接收方的直接耦合;3. MQ消息必達,架構(gòu)上有兩個核心設(shè)計點:消息重發(fā)可能導致收到重復的消息,如何進行架構(gòu)冪等性設(shè)計,下次撰文另述。https://www.geeksforgeeks.org/message-queues-system-design/
==全文完==
該文章在 2025/1/6 10:44:29 編輯過