掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
MQ的核心架構(gòu)如何?

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了北屯免費(fèi)建站歡迎大家使用!
MQ核心架構(gòu),它由發(fā)送端、服務(wù)端、固化存儲、接收端四大部分組成。
MQ如何保證消息必達(dá)?
MQ消息必達(dá),架構(gòu)上有兩個核心設(shè)計點:
畫外音:詳見核心架構(gòu)中的步驟1-6。
MQ消息重傳,是否可能導(dǎo)致重復(fù)的消息?
有可能。
為保證消息的可達(dá)性,超時、重傳、確認(rèn)機(jī)制可能導(dǎo)致MQ、或者業(yè)務(wù)方收到重復(fù)的消息,從而對業(yè)務(wù)產(chǎn)生影響。
舉個栗子:購買會員卡,上游支付系統(tǒng)負(fù)責(zé)給用戶扣款,下游系統(tǒng)負(fù)責(zé)給用戶發(fā)卡,通過MQ異步通知。不管是上半場的ACK丟失,導(dǎo)致MQ收到重復(fù)的消息,還是下半場ACK丟失,導(dǎo)致購卡系統(tǒng)收到重復(fù)的購卡通知,都可能出現(xiàn),上游扣了一次錢,下游發(fā)了多張卡。
為了避免對業(yè)務(wù)的影響,MQ如何保證冪等性?
MQ的冪等性,由兩部分構(gòu)成:
上半場消息發(fā)送,如何保證冪等性?
MQ消息發(fā)送上半場,即上圖中的1-3:
如果3丟失,發(fā)送端MQ-client超時后會重發(fā)消息,可能導(dǎo)致服務(wù)端MQ-server收到重復(fù)消息。
此時重發(fā)是MQ-client發(fā)起的,消息的處理是MQ-server,為了避免步驟2落地重復(fù)的消息,對每條消息,MQ系統(tǒng)內(nèi)部必須生成一個inner-msg-id,作為去重和冪等的依據(jù),這個內(nèi)部消息ID的特性是:
有了這個inner-msg-id,就能保證上半場重發(fā),也只有1條消息落到MQ-server的DB中,實現(xiàn)上半場冪等。
下半場消息發(fā)送,如何保證冪等性?
MQ消息發(fā)送下半場,即上圖中的4-6:
需要強(qiáng)調(diào)的是,接收端MQ-client回ACK給服務(wù)端MQ-server,是消息消費(fèi)業(yè)務(wù)方的主動調(diào)用行為,不能由MQ-client自動發(fā)起,因為MQ系統(tǒng)不知道消費(fèi)方什么時候真正消費(fèi)成功。
如果5丟失,服務(wù)端MQ-server超時后會重發(fā)消息,可能導(dǎo)致MQ-client收到重復(fù)的消息。
此時重發(fā)是MQ-server發(fā)起的,消息的處理是消息消費(fèi)業(yè)務(wù)方,消息重發(fā)勢必導(dǎo)致業(yè)務(wù)方重復(fù)消費(fèi)(上例中的一次付款,重復(fù)發(fā)卡),為了保證業(yè)務(wù)冪等性,業(yè)務(wù)消息體中,必須有一個biz-id,作為去重和冪等的依據(jù),這個業(yè)務(wù)ID的特性是:
最常見的業(yè)務(wù)ID有:支付ID,訂單ID,帖子ID等。 具體到支付購卡場景,發(fā)送方必須將支付ID放到消息體中,消費(fèi)方必須對同一個支付ID進(jìn)行判重,保證購卡的冪等。
有了這個業(yè)務(wù)ID,才能夠保證下半場消息消費(fèi)業(yè)務(wù)方即使收到重復(fù)消息,也只有1條消息被消費(fèi),保證了冪等。
總結(jié),MQ如何保證消息冪等?
首先,上半場冪等。
MQ-client生成inner-msg-id,保證上半場冪等。
這個ID全局唯一,業(yè)務(wù)無關(guān),由MQ保證。
然后,下半場冪等。
業(yè)務(wù)發(fā)送方帶入biz-id,業(yè)務(wù)接收方去重保證冪等。
這個ID對單業(yè)務(wù)唯一,業(yè)務(wù)相關(guān),對MQ透明。
因此,冪等性,不僅對MQ有要求,對業(yè)務(wù)上下游也有要求。
【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】
戳這里,看該作者更多好文

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流