公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

架構(gòu)師必會-基于消息的分布式事務(wù)實(shí)現(xiàn)方案

admin
2023年5月25日 9:33 本文熱度 1008

1. 前言

業(yè)務(wù)系統(tǒng)之間通過MQ進(jìn)行交互時(shí),怎么保證發(fā)送的消息對方一定能收到,可能有人說RocketMQ就能做到,如果貴公司用到的消息隊(duì)列是kafka、rabbitmq、activemq實(shí)現(xiàn)

這里分享一下基于消息的分布式事務(wù)解決方案,此種方案是最終一致性的解決方案,不挑MQ,但是前提MQ本身要支持接收到的消息不能丟失。


2. MQ的配置建議

如果要保證MQ接收到的消息不丟,就要配置相關(guān)的同步策略或者刷盤策略

主從同步策略

建議主從同步建議設(shè)置為主從同步策略為主從同步完再響應(yīng),這樣單個(gè)節(jié)點(diǎn)如果掛了,另一個(gè)節(jié)點(diǎn)的數(shù)據(jù)還會存在

刷盤策略

消息中間件為了提高效率,默認(rèn)接收到消息不會立即刷盤,如果要主從同步策略是主節(jié)點(diǎn)接收到消息以后立即響應(yīng),這會正好主節(jié)點(diǎn)宕機(jī),就會導(dǎo)致消息丟失,所以要特別注意下,雖然可以設(shè)置成同步刷盤,但是效率就會降低,所以還是建議設(shè)置主從同步策略

3. 生產(chǎn)方設(shè)計(jì)

生產(chǎn)者的職責(zé)是必須要保證本地事務(wù)提交成功消息一定要發(fā)送出去,或者業(yè)務(wù)處理失敗就不發(fā)送。

3.1 消息持久化

生產(chǎn)方方案如下,首先需要在業(yè)務(wù)庫中創(chuàng)建一張表,字段大致為:

  • • 消息id

  • • 業(yè)務(wù)id

  • • 業(yè)務(wù)方名稱(如果一個(gè)庫是多個(gè)子系統(tǒng)在用就需要這個(gè)字段)

  • • topic(發(fā)送消息主題)

  • • 分區(qū)

  • • 消息體

  • • 狀態(tài)(0未發(fā)送 1已發(fā)送)

  • • 是否失敗重試( 0不重試 1重試)

與本地業(yè)務(wù)表使用同一個(gè)事務(wù),提交則一起提交,回滾則一起回滾,因?yàn)槭褂玫耐粋€(gè)事務(wù)所以是強(qiáng)一致的,再事務(wù)提交以后進(jìn)行消息數(shù)據(jù)的發(fā)送,發(fā)送成功以后則更改消息狀態(tài)為已發(fā)送,具體流程請查看圖1

   
圖1 消息正常發(fā)送流程


這里可能還有一點(diǎn)還要考慮,就是在圖1的第2步、第3步、第4步會出現(xiàn)失敗,具體描述如下:

  1. 1. 如插入本地庫成功,但是發(fā)送MQ失敗

  2. 2. 消息發(fā)送成功,但是響應(yīng)失敗,比如超時(shí),其實(shí)這會MQ已經(jīng)接收發(fā)送方的消息了,但是發(fā)送方不清楚

  3. 3. 消息發(fā)送響應(yīng)都成功了,但是更改本地表狀態(tài)為已發(fā)送失敗了。

持久化相關(guān)代碼

圖3 消息數(shù)據(jù)保存



圖4,集成Spring的事務(wù)管理器,重寫事務(wù)提交后發(fā)送消息


圖4 消息數(shù)據(jù)發(fā)送


3.2 消息補(bǔ)償設(shè)計(jì)

以上這三個(gè)問題就需要引入補(bǔ)償任務(wù)來處理了,具體查看圖5,補(bǔ)償任務(wù)會根據(jù)發(fā)送狀態(tài)查詢對應(yīng)的數(shù)據(jù),然后進(jìn)行發(fā)送,這里有一點(diǎn)特別注意,消費(fèi)方要必須做冪等處理,因?yàn)閳D1的第3步、第4步消息都已經(jīng)發(fā)送到MQ了,只是發(fā)送方不清楚,所以還會重復(fù)發(fā)送,另外99.9%的場景是能立即發(fā)送成功的,只有很小部分需要做補(bǔ)償:

圖5 消息補(bǔ)償流程



補(bǔ)償代碼


查詢待發(fā)送的數(shù)據(jù),這里為1分鐘之前的,定時(shí)任務(wù)用的是elastic-job,用其他定時(shí)任務(wù)也可以

至此整個(gè)發(fā)送方設(shè)計(jì)就完成了,下面看看部分

4. 消費(fèi)方設(shè)計(jì)

消費(fèi)方相對比較簡單,主要有兩點(diǎn)要求

  1. 1. 保證消息不會重復(fù)消費(fèi)

  2. 2. 記錄消息便于消息對賬,對賬主要是極端情況下,那些消息沒收到,便于重新投遞

以下是消費(fèi)表的設(shè)計(jì)

  • • 消息id

  • • 業(yè)務(wù)id

  • • Topic

  • • 分區(qū)

  • • 偏移量

  • • 消息體

  • • 狀態(tài)(0未消費(fèi)成功 1消費(fèi)成功 2消費(fèi)失敗 )

  • • 異常信息(消費(fèi)失敗會記錄異常信息)

  • • 業(yè)務(wù)方名稱(如果一個(gè)庫是多個(gè)子系統(tǒng)在用就需要這個(gè)字段)

此表也要與業(yè)務(wù)表處于同一個(gè)事務(wù),如果不是一個(gè)事務(wù),會出現(xiàn)業(yè)務(wù)表操作成功、消息表插入失敗,如果出現(xiàn)消息重復(fù)發(fā)送就會出現(xiàn)重復(fù)消費(fèi)的問題,具體查看圖6

圖6 消費(fèi)方處理流程圖



消費(fèi)方代碼

這里是kafka的消費(fèi)代碼,通過動(dòng)態(tài)代理,封裝KafkaListener類,在處理前進(jìn)行消息重復(fù)判斷,在處理后進(jìn)行消費(fèi)表的插入,這里需要特別注意一點(diǎn),業(yè)務(wù)處理不能把異常自己吃掉,否則上層捕獲不到,會認(rèn)為業(yè)務(wù)處理成功,從而插入臟數(shù)據(jù)

圖7 消費(fèi)方部分核心代碼


5. 歷史數(shù)據(jù)清理

通過前面介紹,我們創(chuàng)建了2張表,分別為消息發(fā)送表、消息消費(fèi)表,這兩張表要特別注意下,如果業(yè)務(wù)量比較大,數(shù)據(jù)量會快速增長,所以需要?jiǎng)h除已經(jīng)處理成功的數(shù)據(jù),通過配置兩個(gè)定時(shí)任務(wù),保留一定的時(shí)間數(shù)據(jù),其他時(shí)間的數(shù)據(jù)就可以刪除了,代碼如下:

圖8 發(fā)送方清理數(shù)據(jù)代碼


9 消費(fèi)方清理數(shù)據(jù)代


該文章在 2023/5/25 9:33:02 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产一区二三区好的精华液 | 国产精品日韩欧美一区二区视频 | 国产成人免费软件 | 精品国产一区二区三区无码蜜桃 | 国产成人av一区二区三区无码 | 国产精品日本欧美一区三 | 国产精品一区二区三乱码 | 国产精品wwwcom976con | 极品主播av在线 | 国产成人无码一二三区视频 | 高潮好爽视频在线观看 | 国产成人福利资源在线观看 | 精品韩国三级在线观看视频 | 2025免费高清电影大全 | 国产v天堂在线观看免费 | 国产原创无码视频在线观看 | 国产av麻豆一区 | 国产白丝在| 国产v片在线播放 | 国产日韩无码 | 国产高级会所按摩技师在线看 | 福利一区在线观看 | 国产毛片视频 | a级日本乱理伦片免费入口 a级日本乱理伦片免费入口: | 精品免费av一区二区 | 成人无码一区二区三区网站 | 精品无码午夜福利 | 国产一区二区三区精品久久 | 国产91白浆在线观看 | 国产一级毛片视频网 | 国产av人人夜夜澡人人爽 | 国产萌白酱喷水视频在线观看 | 国产成人精品久久二区二区 | 国产精品女人呻吟 | 国产99久久久久 | 国产激情一区二区三区成人91 | 国产av无码专区亚洲av果冻传 | 福利一区在线观看 | 精品国产aⅴ一区二区三区v免费 | 国产精品自拍av | 按摩一级国产毛片按摩 |