成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

消息總線真的能保證冪等?

開發(fā) 開發(fā)工具
MQ為了保證消息必達(dá),消息上下半場均可能發(fā)送重復(fù)消息,如何保證消息的冪等性呢?這是本文將要講的內(nèi)容。

一、緣起

如《消息總線消息必達(dá)》所述,MQ消息必達(dá),架構(gòu)上有兩個(gè)核心設(shè)計(jì)點(diǎn):

(1)消息落地

(2)消息超時(shí)、重傳、確認(rèn)

消息總線核心架構(gòu)

再次回顧消息總線核心架構(gòu),它由發(fā)送端、服務(wù)端、固化存儲、接收端四大部分組成。

為保證消息的可達(dá)性,超時(shí)、重傳、確認(rèn)機(jī)制可能導(dǎo)致消息總線、或者業(yè)務(wù)方收到重復(fù)的消息,從而對業(yè)務(wù)產(chǎn)生影響。

舉個(gè)栗子:

購買會員卡,上游支付系統(tǒng)負(fù)責(zé)給用戶扣款,下游系統(tǒng)負(fù)責(zé)給用戶發(fā)卡,通過MQ異步通知。不管是上半場的ACK丟失,導(dǎo)致MQ收到重復(fù)的消息,還是下半場ACK丟失,導(dǎo)致購卡系統(tǒng)收到重復(fù)的購卡通知,都可能出現(xiàn),上游扣了一次錢,下游發(fā)了多張卡。

消息總線的冪等性設(shè)計(jì)至關(guān)重要,是本文將要討論的重點(diǎn)。

二、上半場的冪等性設(shè)計(jì)

上半場的冪等性設(shè)計(jì)

MQ消息發(fā)送上半場,即上圖中的1-3

  • 1,發(fā)送端MQ-client將消息發(fā)給服務(wù)端MQ-server
  • 2,服務(wù)端MQ-server將消息落地
  • 3,服務(wù)端MQ-server回ACK給發(fā)送端MQ-client

如果3丟失,發(fā)送端MQ-client超時(shí)后會重發(fā)消息,可能導(dǎo)致服務(wù)端MQ-server收到重復(fù)消息。

此時(shí)重發(fā)是MQ-client發(fā)起的,消息的處理是MQ-server,為了避免步驟2落地重復(fù)的消息,對每條消息,MQ系統(tǒng)內(nèi)部必須生成一個(gè)inner-msg-id,作為去重和冪等的依據(jù),這個(gè)內(nèi)部消息ID的特性是:

(1)全局***

(2)MQ生成,具備業(yè)務(wù)無關(guān)性,對消息發(fā)送方和消息接收方屏蔽

有了這個(gè)inner-msg-id,就能保證上半場重發(fā),也只有1條消息落到MQ-server的DB中,實(shí)現(xiàn)上半場冪等。

三、下半場的冪等性設(shè)計(jì)

下半場的冪等性設(shè)計(jì)

MQ消息發(fā)送下半場,即上圖中的4-6

  • 4,服務(wù)端MQ-server將消息發(fā)給接收端MQ-client
  • 5,接收端MQ-client回ACK給服務(wù)端
  • 6,服務(wù)端MQ-server將落地消息刪除

需要強(qiáng)調(diào)的是,接收端MQ-client回ACK給服務(wù)端MQ-server,是消息消費(fèi)業(yè)務(wù)方的主動調(diào)用行為,不能由MQ-client自動發(fā)起,因?yàn)镸Q系統(tǒng)不知道消費(fèi)方什么時(shí)候真正消費(fèi)成功。

如果5丟失,服務(wù)端MQ-server超時(shí)后會重發(fā)消息,可能導(dǎo)致MQ-client收到重復(fù)的消息。

此時(shí)重發(fā)是MQ-server發(fā)起的,消息的處理是消息消費(fèi)業(yè)務(wù)方,消息重發(fā)勢必導(dǎo)致業(yè)務(wù)方重復(fù)消費(fèi)(上例中的一次付款,重復(fù)發(fā)卡),為了保證業(yè)務(wù)冪等性,業(yè)務(wù)消息體中,必須有一個(gè)biz-id,作為去重和冪等的依據(jù),這個(gè)業(yè)務(wù)ID的特性是:

(1)對于同一個(gè)業(yè)務(wù)場景,全局***

(2)由業(yè)務(wù)消息發(fā)送方生成,業(yè)務(wù)相關(guān),對MQ透明

(3)由業(yè)務(wù)消息消費(fèi)方負(fù)責(zé)判重,以保證冪等

最常見的業(yè)務(wù)ID有:支付ID,訂單ID,帖子ID等。

具體到支付購卡場景,發(fā)送方必須將支付ID放到消息體中,消費(fèi)方必須對同一個(gè)支付ID進(jìn)行判重,保證購卡的冪等。

有了這個(gè)業(yè)務(wù)ID,才能夠保證下半場消息消費(fèi)業(yè)務(wù)方即使收到重復(fù)消息,也只有1條消息被消費(fèi),保證了冪等。

三、總結(jié)

MQ為了保證消息必達(dá),消息上下半場均可能發(fā)送重復(fù)消息,如何保證消息的冪等性呢?

上半場

  • MQ-client生成inner-msg-id,保證上半場冪等。
  • 這個(gè)ID全局***,業(yè)務(wù)無關(guān),由MQ保證。

下半場

  • 業(yè)務(wù)發(fā)送方帶入biz-id,業(yè)務(wù)接收方去重保證冪等。
  • 這個(gè)ID對單業(yè)務(wù)***,業(yè)務(wù)相關(guān),對MQ透明。

結(jié)論:冪等性,不僅對MQ有要求,對業(yè)務(wù)上下游也有要求。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-10-18 07:25:55

MQ消息冪等架構(gòu)

2021-04-14 17:18:27

冪等性數(shù)據(jù)源MySQL

2025-01-13 05:00:00

2023-09-01 15:27:31

2025-02-26 08:20:18

2020-07-15 08:14:12

高并發(fā)

2021-01-18 14:34:59

冪等性接口客戶端

2020-11-03 07:43:24

MQ版本號程序員

2024-07-10 12:23:10

2021-03-28 09:45:05

冪等性接口數(shù)據(jù)

2024-06-07 09:06:36

2025-01-20 10:22:23

2024-03-13 15:18:00

接口冪等性高并發(fā)

2023-10-26 07:32:42

2021-08-04 17:40:42

代碼Java消息冪等

2020-06-22 18:54:39

消息隊(duì)列冪等性

2024-04-28 08:38:53

Kafka分布式系統(tǒng)

2017-03-20 09:50:35

消息隊(duì)列架構(gòu)消息

2021-05-17 16:24:58

Spring Clou

2021-06-02 17:58:49

腳手架 冪等性前端
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产亚洲欧美日韩精品一区二区三区 | 国产 欧美 日韩 一区 | 91精品国产91久久久久久 | 日韩激情一区 | 精品国产乱码久久久久久1区2区 | 蜜桃特黄a∨片免费观看 | 放个毛片看看 | 国产精品欧美一区二区三区 | 九九九久久国产免费 | 草久久免费视频 | 久久av资源网 | 一级a性色生活片久久毛片波多野 | 欧美日韩亚 | 日韩在线一区二区三区 | 91免费看片| 日韩精品| av在线播放国产 | 国产欧美精品一区 | 欧美视频成人 | 日韩视频一区二区 | 国产精品一区二区三区免费观看 | www.黄色网 | 成人一区二 | 日韩欧美国产一区二区三区 | 亚洲精品在线视频 | 国产一区高清 | 亚洲欧美国产精品久久 | 超碰超碰 | 国产日韩精品在线 | 精品国产乱码久久久久久丨区2区 | 国产婷婷精品 | 国产在线视频一区二区董小宛性色 | 永久免费在线观看 | 国外成人在线视频网站 | 亚洲va欧美va人人爽午夜 | 亚洲免费久久久 | 亚洲欧美精品国产一级在线 | 天天搞天天操 | 欧美一区二区在线免费观看 | 亚洲精品在线看 | 亚洲精品视频免费观看 |