精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

事務(wù)消息應(yīng)用場景、實(shí)現(xiàn)原理與項(xiàng)目實(shí)戰(zhàn)

開發(fā) 項(xiàng)目管理
在電商系統(tǒng)上線初期,往往會進(jìn)行一些“拉新”活動,例如活動部門提出新用戶注冊送積分、送優(yōu)惠券活動。

[[385914]]

1、活動中心場景介紹

在電商系統(tǒng)上線初期,往往會進(jìn)行一些“拉新”活動,例如活動部門提出新用戶注冊送積分、送優(yōu)惠券活動。

基于分布式、微服務(wù)的設(shè)計(jì)理念,通常的架構(gòu)設(shè)計(jì)(子系統(tǒng)交互)如下圖所示:

其核心系統(tǒng)介紹如下:

  • 賬戶中心

提供用戶登錄、用戶注冊等服務(wù),一個新用戶注冊時,向MQ服務(wù)器中的USER_REGISTER主題發(fā)送一條消息,主流程結(jié)束,與送積分,送優(yōu)惠券等過程解耦。

  • 優(yōu)惠券(券系統(tǒng))

提供發(fā)放優(yōu)惠券、使用優(yōu)惠券等與券相關(guān)的基礎(chǔ)服務(wù)。

  • 積分中心

提供積分相關(guān)的服務(wù),例如積分贈送、積分消費(fèi)、積分查詢等基礎(chǔ)服務(wù)。

  • 送積分服務(wù)(消費(fèi)者)

訂閱MQ,按照規(guī)則決定是否需要贈送積分,如果需要則調(diào)用積分相關(guān)的基礎(chǔ)接口,完成積分的發(fā)放。

  • 送優(yōu)惠券(消費(fèi)者)

訂閱MQ,按照規(guī)則決定是否需要贈送優(yōu)惠券,如果需要則調(diào)用券系統(tǒng)相關(guān)的基礎(chǔ)接口,完成優(yōu)惠券的發(fā)放。

上面的架構(gòu)設(shè)計(jì)非常優(yōu)雅,但并不是無懈可擊,讀者們肯定會想到如果新用戶注冊成功,但消息發(fā)送到MQ失敗,或者消息成功發(fā)送到MQ,但發(fā)送完MQ后系統(tǒng)出現(xiàn)異常導(dǎo)致用戶注冊失敗又該如何呢?

上面的問題其實(shí)就是典型的分布式事務(wù)問題:即如何保證用戶注冊(數(shù)據(jù)庫操作)與MQ消息發(fā)送這兩個分布式操作的一致性。

RocketMQ事務(wù)消息閃亮登場。

2、事務(wù)消息實(shí)現(xiàn)原理

一言以蔽之:RocketMQ事務(wù)消息要解決的問題是消息發(fā)送與業(yè)務(wù)的一致性,其解決思路:二階段提交與事務(wù)狀態(tài)回查,其具體實(shí)現(xiàn)流程如下圖所示:

其核心設(shè)計(jì)理念:

  • 應(yīng)用程序開啟一個數(shù)據(jù)庫事務(wù),進(jìn)行數(shù)據(jù)庫操作,并且在事務(wù)中發(fā)送一條PREPARE消息,PREPARE消息發(fā)送成功后通知應(yīng)用程序記錄本地事務(wù)狀態(tài),然后提交本地事務(wù)。
  • RocketMQ在收到類型為PREPARE的消息時,首先備份消息的原主題與原消息消費(fèi)隊(duì)列,然后將消息存儲在主題為RMQ_SYS_TRANS_HALF_TOPIC的消息隊(duì)列中,故PREPARE的消息是不會被客戶端消費(fèi)的。
  • Broker消息服務(wù)器開啟一個定時任務(wù)處理RMQ_SYS_TRANS_HALF_TOPIC中的消息,會每隔指定時間向消息發(fā)送者發(fā)起事務(wù)狀態(tài)查詢請求 ,詢問消息發(fā)送者客戶端本地事務(wù)是否成功,然后根據(jù)回查狀態(tài)決定是提交還是回滾,即對處于PREPARE狀態(tài)進(jìn)行提交或回滾操作。
  • 發(fā)送者如果明確得知事務(wù)成功,則可以返回COMMIT,服務(wù)端會提交該條消息,具體操作是恢復(fù)原消息的主題與隊(duì)列,重新發(fā)送到Broker,消費(fèi)端感知后消費(fèi)。
  • 發(fā)送者如果無法明確得知事務(wù)狀態(tài),則返回UNOWN,此時服務(wù)端會等待一定時間后再次向發(fā)送者詢問,默認(rèn)詢問15次。
  • 發(fā)送者如果非常明確得知事務(wù)失敗,則可以返回ROLLBACK。

在具體實(shí)踐中,消息發(fā)送者在無法獲取事務(wù)狀態(tài)時不要武斷的返回ROLLBACK,而是要返回UNOWN,讓服務(wù)端定時重試回查,說明如下:

在將PREPARE消息發(fā)送到Broker后,服務(wù)端發(fā)起事務(wù)查詢時本地事務(wù)可能還未提交,為了避免無效的事務(wù)回查機(jī)制,RocketMQ通常至少在收到PREPARE消息6s后才會發(fā)起第一次事務(wù)回查,可通過 transactionTimeOut 配置。故客戶端在實(shí)現(xiàn)事務(wù)回查時無法證明事務(wù)狀態(tài)時不應(yīng)該返回ROLLBACK,而是返回UNOWN。

3、事務(wù)消息實(shí)戰(zhàn)

光說不練假把式,接下來以一個新用戶注冊送優(yōu)惠券的場景來詳細(xì)介紹如何使用事務(wù)消息。

項(xiàng)目模塊職責(zé)說明如下:

事務(wù)消息的核心代碼組裝在transaction-service,其核心類圖如下:

其中核心要點(diǎn)如下:

  • UserServiceImpl

Dubbo接口業(yè)務(wù)實(shí)現(xiàn)類,類似MVC的控制層,在這里做一些參數(shù)驗(yàn)證,但不執(zhí)行具體的業(yè)務(wù)邏輯,只是發(fā)送一條事務(wù)消息到MQ。

  • UserRegTransactionListener

事務(wù)監(jiān)聽器,在 executeLocalTransaction 方法中執(zhí)行業(yè)務(wù)邏輯,數(shù)據(jù)庫本地事務(wù)加在該方法。

溫馨提示:之所以不在UserServicveImpl中執(zhí)行本地事務(wù),是因?yàn)?executeLocalTransaction 中拋出的異常會被RocketMQ框架捕捉,及異常無法被UserServiceImpl感知,即無法實(shí)現(xiàn)其事務(wù)的一致性。

接下來展示其核心代碼,全部源碼已上傳到github倉庫。

倉庫地址:https://github.com/dingwpmz/rocketmq-learning

3.1 UserServiceImpl 核心實(shí)現(xiàn)

UserServiceImpl 的核心要點(diǎn)如下:

  • 首先應(yīng)該對參數(shù)進(jìn)行校驗(yàn)、業(yè)務(wù)邏輯進(jìn)行校驗(yàn),如果不滿足業(yè)務(wù)條件,會發(fā)送一些無效消息到MQ,雖然不會造成業(yè)務(wù)異常,但會消耗性能
  • 發(fā)送事務(wù)消息,建議對消息設(shè)置Key,Key的值可以用業(yè)務(wù)處理流水號(可唯一表示該業(yè)務(wù)操作)或者核心業(yè)務(wù)字段(例如訂單編號)
  • 業(yè)務(wù)入口類可通過事務(wù)消息發(fā)送狀態(tài)來判斷業(yè)務(wù)是否失敗。

3.2 UserRegTransactionListener 核心實(shí)現(xiàn)

事務(wù)監(jiān)聽器需要實(shí)現(xiàn)執(zhí)行本地事務(wù)與事務(wù)回查兩個接口。

3.2.1 實(shí)現(xiàn) executeLocalTransaction

首先需要實(shí)現(xiàn) executeLocalTransaction 方法,執(zhí)行本地事務(wù),其代碼如下圖所示:

其中幾個關(guān)鍵點(diǎn)說明如下:

  • 在該方法上添加數(shù)據(jù)庫事務(wù)標(biāo)簽。
  • 執(zhí)行業(yè)務(wù)邏輯,示例Demo只是將用戶數(shù)據(jù)存儲到數(shù)據(jù)庫。
  • 如果業(yè)務(wù)執(zhí)行失敗,可明確告知需要回滾,上層調(diào)用方也可根據(jù)ROLLBACK_MESSAGE進(jìn)行相應(yīng)的處理。
  • 如果業(yè)務(wù)成功,不建議直接返回COMMIT,而是建議返回UNKNOW,因?yàn)樵摲椒ūM管在方法最后一行,但可能發(fā)生斷電等異常情況,數(shù)據(jù)庫并沒有成功。

3.2.2 實(shí)現(xiàn) checkLocalTransaction

其次需要實(shí)現(xiàn)事務(wù)狀態(tài)回查,用來RocketMQ服務(wù)端感知事務(wù)是否成功,其實(shí)現(xiàn)原理如下圖所示:

其實(shí)現(xiàn)關(guān)鍵點(diǎn)如下:

  • 如果能明確得知本地事務(wù)成功,則返回COMMIT_MESSAGE
  • 如該不能明確得知本地事務(wù)成功,不能返回ROLLBACK_MESSAGE,而是返回UNKNOW,等待服務(wù)端下一次事務(wù)回查(不會立即觸發(fā)),服務(wù)端默認(rèn)回查15次,如果15次都得到UNKNOW,則會回滾該消息。

3.3 代碼獲取

上文只是將事務(wù)消息的核心代碼加以解讀,并重點(diǎn)闡述每個步驟的實(shí)現(xiàn)關(guān)鍵點(diǎn),筆者基于SpringBoot,嘗試結(jié)合場景學(xué)習(xí)RocketMQ的使用技巧,其代碼上傳到了github倉庫。

 

https://github.com/dingwpmz/rocketmq-learning

丁威,《RocketMQ技術(shù)內(nèi)幕》作者,RocketMQ社區(qū)優(yōu)秀布道師,主打成體系分享JAVA主流中間件,打造完備的互聯(lián)網(wǎng)架構(gòu)體系,目前涵蓋Java并發(fā)、微服務(wù)、消息、調(diào)度、數(shù)據(jù)異構(gòu)等領(lǐng)域,未來繼續(xù)關(guān)注監(jiān)控、在線診斷等領(lǐng)域。

本文轉(zhuǎn)載自微信公眾號「中間件興趣圈」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系中間件興趣圈公眾號。

 

責(zé)任編輯:武曉燕 來源: 中間件興趣圈
相關(guān)推薦

2023-06-05 08:07:33

JavaJava SPI

2021-04-21 09:21:07

zookeeper集群源碼

2024-09-30 10:06:27

2017-09-18 17:59:23

Hadoop數(shù)據(jù)分析

2014-05-15 09:43:11

CloudaMobile WebANodejs

2013-09-09 15:55:12

SDN應(yīng)用場景

2010-12-21 14:21:36

線程C#

2024-09-06 11:52:47

2022-05-31 08:21:07

MQ使用場景消費(fèi)消息

2011-05-17 15:24:18

Shibboleth認(rèn)證

2024-03-29 08:33:10

應(yīng)用場景存儲搜索

2024-09-19 08:08:25

2023-09-12 09:35:45

2023-11-13 08:31:25

SpringRedis存儲

2024-01-26 13:17:00

rollbackMQ訂單系統(tǒng)

2024-04-28 08:38:53

Kafka分布式系統(tǒng)

2024-05-29 14:34:07

2012-10-23 09:32:07

2015-06-15 10:03:52

聯(lián)想互聯(lián)網(wǎng)

2021-09-06 15:39:00

大數(shù)據(jù)技術(shù)醫(yī)療
點(diǎn)贊
收藏

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

色琪琪久久se色| 久久爱91午夜羞羞| 成人综合婷婷国产精品久久| 国内外成人免费激情在线视频网站 | 超碰在线超碰在线| 国产资源在线观看入口av| 久久久精品免费网站| 91视频免费网站| 日本在线播放视频| 亚洲91视频| 精品视频在线播放色网色视频| a在线观看免费视频| 91九色在线看| 亚洲欧美自拍偷拍| 欧美高清视频一区二区三区在线观看| 91精品国产色综合久久不8| 欧美午夜不卡影院在线观看完整版免费| 日韩禁在线播放| 午夜av中文字幕| 国产精品扒开腿做爽爽爽视频软件| 亚洲色图另类专区| 视频二区一区| 色哟哟国产精品色哟哟| 国产一区二区三区不卡在线观看 | 久久精品欧美一区二区| 日韩av有码| 精品亚洲国产视频| 亚洲黄色小说在线观看| 欧美天堂一区二区| 欧美综合视频在线观看| 日韩少妇内射免费播放| 中文在线免费| 18欧美亚洲精品| 欧美日韩一区在线视频| 人妻中文字幕一区| 国产麻豆视频一区| 成人xxxx视频| 最好看的日本字幕mv视频大全| 一区二区国产精品| 国产综合在线视频| 国产在线观看99| 欧美精品不卡| 欧美裸体xxxx极品少妇| 久久成人小视频| 久久中文视频| 日韩在线观看视频免费| 青青青视频在线免费观看| 狠狠色丁香婷婷综合影院| 日韩精品有码在线观看| 一级特级黄色片| 美女av一区| 亚洲成人精品av| 国产视频精品视频| 国产精品巨作av| 精品国内片67194| 丰满岳乱妇一区二区| a看欧美黄色女同性恋| 日韩区在线观看| av漫画在线观看| 激情av综合| 日韩av在线天堂网| 亚洲综合网在线观看| 美女网站一区| 一区二区三区国产视频| 天堂网中文在线观看| 久久久久久久久国产一区| 久久夜色精品国产欧美乱| 日本妇女毛茸茸| 亚洲一级黄色| 欧美亚洲国产精品| 中文字幕在线观看1| 国模无码大尺度一区二区三区| 91亚洲永久免费精品| 性欧美18一19性猛交| 成人黄色国产精品网站大全在线免费观看 | 欧美a视频在线观看| 日韩av不卡在线观看| 国产精品亚洲视频在线观看| 国产精品探花视频| 国产1区2区3区精品美女| 国产女主播一区二区| 美女毛片在线看| 国产精品每日更新| 日b视频免费观看| 性欧美超级视频| 欧美二区乱c少妇| 国模无码视频一区| 精品国产一区二区三区四区| 久久精品成人动漫| 日韩乱码在线观看| 蜜桃av噜噜一区二区三区小说| 91精品视频免费观看| 亚洲乱熟女一区二区| 久久综合成人精品亚洲另类欧美 | 久草视频福利在线| 欧美少妇xxxx| 欧美激情国产高清| 无码视频在线观看| 国产成人亚洲精品狼色在线| 美脚丝袜一区二区三区在线观看| 免费大片黄在线观看视频网站| 亚洲午夜电影在线观看| 天天色综合天天色| jizz久久精品永久免费| 永久免费毛片在线播放不卡| 国产精久久久久久| 久久99精品久久久久婷婷| 久久香蕉综合色| 午夜成年人在线免费视频| 欧洲视频一区二区| 亚洲久久久久久| 牛夜精品久久久久久久99黑人| 欧美中文在线观看国产| 精品国产18久久久久久| 日本一区二区视频在线| 每日在线观看av| 成人在线分类| 在线观看欧美日韩国产| 中文字幕亚洲精品一区| 国产a级毛片一区| 综合色婷婷一区二区亚洲欧美国产| 激情aⅴ欧美一区二区欲海潮| 制服丝袜亚洲网站| 久久久精品成人| 蜜桃久久av| 国产精品yjizz| 爆操欧美美女| 7777精品伊人久久久大香线蕉超级流畅 | 日日噜噜噜噜人人爽亚洲精品| 国产精品99久久久久久似苏梦涵 | 在线a人片免费观看视频| 欧美日韩精品中文字幕| 女女调教被c哭捆绑喷水百合| 小处雏高清一区二区三区| 国产精品成人国产乱一区| 日本天堂影院在线视频| 欧美日韩色婷婷| 手机在线成人av| 韩国在线一区| 国产精品视频入口| 欧美6一10sex性hd| 日韩欧美中文字幕一区| 精国产品一区二区三区a片| 激情成人综合网| 黄色a级在线观看| 99综合99| 久久天天躁狠狠躁夜夜爽蜜月| 中文字幕日日夜夜| 国产精品美日韩| 美女少妇一区二区| 五月婷婷亚洲| 亚洲伊人久久综合| 青春草免费在线视频| 欧美成人欧美edvon| 久久精品视频日本| 91在线视频免费观看| 中文字幕日本最新乱码视频| 亚洲综合图色| 国产精品69av| 尤物网址在线观看| 制服丝袜中文字幕亚洲| 激情小说中文字幕| 91在线你懂得| 蜜臀久久99精品久久久酒店新书| 国内亚洲精品| 91久久久久久久一区二区| 人人澡人人添人人爽一区二区| 精品久久五月天| 伊人手机在线视频| 国产精品人人做人人爽人人添| 男人的天堂最新网址| 欧美激情视频一区二区三区在线播放| 成人av电影免费| 成人爱爱网址| 日韩一区二区在线视频| 午夜老司机福利| 色婷婷国产精品综合在线观看| 亚洲高潮女人毛茸茸| 国产精品一区二区在线观看不卡| www.av蜜桃| 亚洲最好看的视频| 91精品视频一区| xxx欧美xxx| 日韩最新av在线| 亚洲精品一区二区三区蜜桃| 色呦呦国产精品| 最新一区二区三区| 91网站黄www| 中文字幕一区久久| 国产精品试看| 在线精品亚洲一区二区| 久久99精品国产自在现线| 国产精品男人的天堂| 青草青在线视频| 国产午夜精品免费一区二区三区 | 亚洲美女久久久| 国产情侣一区二区| 色综合久久天天综合网| 亚洲av鲁丝一区二区三区| 久久久久国产精品厨房| 台湾佬美性中文| 日av在线不卡| a√天堂在线观看| 91超碰成人| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 久久久久久久久久久黄色| 日本中文字幕在线不卡| 久久久久久久欧美精品| 欧洲精品在线播放| 欧美韩日高清| 欧美18视频| 在这里有精品| 成人性生交xxxxx网站| 性感美女一区二区在线观看| 欧美激情中文网| 麻豆视频在线免费观看| 亚洲夜晚福利在线观看| 免费观看黄色一级视频| 欧美精品日韩综合在线| 欧美一区二区三区不卡视频| 亚洲成人一区二区在线观看| 精品人妻伦九区久久aaa片| 中文字幕不卡三区| 在线不卡av电影| 91污片在线观看| 免费a v网站| 成人亚洲精品久久久久软件| 中文字幕第一页在线视频| 蜜臀99久久精品久久久久久软件| 欧美性大战久久久久xxx| 在线观看一区| www.好吊操| 精品9999| 日本手机在线视频| 国产精品theporn| 日本天堂免费a| 欧美国产综合| 人人妻人人澡人人爽精品欧美一区| 欧美裸体在线版观看完整版| 欧美日韩视频在线一区二区观看视频| 欧美有码在线| 久久福利电影| 免费福利视频一区| 国产欧美韩日| 欧美三级午夜理伦三级在线观看| 国产精品二区三区| 国产精品传媒| 久久久神马电影| 日韩精品导航| 日韩精品福利视频| 日韩www.| 成人性做爰片免费视频| 欧美一区二区三区另类| 国产制服91一区二区三区制服| 欧美日韩亚洲国产精品| 国产1区2区3区中文字幕| 影音先锋亚洲精品| 欧美日韩在线一| 久久一区二区三区四区五区| 十八禁视频网站在线观看| 麻豆国产欧美一区二区三区| 岛国av免费在线| 国产精品99久久久久久宅男| 少妇极品熟妇人妻无码| 91在线你懂得| 色婷婷国产精品免| 亚洲精品一二三| 美女毛片在线观看| 欧美视频在线免费| 在线免费观看视频网站| 欧美一级欧美三级| 无码国产精品高潮久久99| 国产午夜精品视频| a级片国产精品自在拍在线播放| 欧美激情中文字幕在线| 桃色一区二区| 91在线视频九色| 日韩av不卡一区| 先锋影音欧美| 黄色日韩精品| 久草综合在线观看| 国产在线精品一区二区三区不卡| 东京热av一区| 国产精品久久一卡二卡| 免费在线观看黄色av| 日本韩国欧美一区| av手机免费看| 亚洲欧美日韩国产中文专区| 大地资源中文在线观看免费版| 精品国产依人香蕉在线精品| 久草在线视频网站| 国产精品日日做人人爱| 风间由美一区二区av101| 亚洲 日韩 国产第一区| 午夜欧美精品| 蜜臀视频一区二区三区| 高清不卡在线观看av| 久久久免费看片| 午夜精品久久久久久久蜜桃app| 无码人妻丰满熟妇区五十路| 日韩女优av电影| av片在线免费观看| 78色国产精品| 国产精品高清一区二区| 日本视频精品一区| 国产精品啊v在线| 亚洲午夜激情影院| 国产视频一区二区三区在线观看| 久久久国产精品黄毛片| 精品视频一区二区三区免费| 少妇人妻偷人精品一区二区 | 免费h在线看| 亚洲xxxx做受欧美| 日韩综合网站| 50路60路老熟妇啪啪| 成人不卡免费av| 欧美成人一区二区三区高清| 欧洲精品一区二区| 三区在线观看| 国语自产精品视频在线看抢先版图片 | 中文字幕 亚洲一区| 一区二区三区不卡在线观看| 岳乳丰满一区二区三区| 亚洲人成在线免费观看| 国产夫妻在线播放| 国产精品一区二| 欧美黄色一区| 污污视频在线免费| 国产精品欧美一区二区三区| 精品成人无码久久久久久| 日韩高清av在线| 成年女人在线看片| 国产精品日韩高清| 亚洲高清不卡| 久久精品无码专区| 亚洲制服丝袜av| www.亚洲欧美| 欧美第一黄网免费网站| 欧美一级大片在线视频| 欧美aaa在线观看| 精品一区二区三区日韩| 登山的目的在线| 欧美精品久久一区二区三区| 秋霞午夜在线观看| 成人久久一区二区三区| 888久久久| 在线成人精品视频| 亚洲午夜久久久久久久久电影院| 午夜精品久久久久久久爽| 欧美激情视频一区二区| 日韩欧美一级| 国产精品久久中文字幕| 不卡欧美aaaaa| 国产无套丰满白嫩对白| 亚洲色图偷窥自拍| 播放一区二区| 曰韩不卡视频| 国产99久久久精品| 日韩av一区二区在线播放| 日韩精品久久久久| 亚洲成人不卡| 一本久道久久综合狠狠爱亚洲精品| 捆绑变态av一区二区三区| 精品国产精品国产精品| 欧美videossexotv100| 麻豆av在线免费观看| 久久av一区二区| 视频一区中文字幕| www.97视频| 亚洲福利在线观看| 亚洲精品.com| 大桥未久一区二区三区| 成人免费高清在线观看| 4438国产精品一区二区| 三级精品视频久久久久| 午夜免费欧美电影| 99色精品视频| 18欧美亚洲精品| 熟妇高潮一区二区三区| 国产精品福利观看| 中文字幕一区二区av| 国产熟女高潮一区二区三区| 欧洲生活片亚洲生活在线观看| caopen在线视频| 欧美高清性xxxxhdvideosex| 精品一区二区三区在线播放视频 | 菠萝蜜视频国产在线播放| 国偷自产av一区二区三区小尤奈| 日韩精品乱码免费| 欧美黑吊大战白妞| 亚洲人高潮女人毛茸茸| 国产精品亚洲一区二区在线观看 | 日本在线视频一区| 国产精品亚洲成人| 日韩欧美在线观看免费| 欧美日本国产在线| 激情综合网五月| youjizz.com日本| 欧美日韩精品一区二区三区| av中文字幕在线看|