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

RocketMQ 事務消息初體驗

開發 前端
假如先發送消息,后修改訂單狀態,消息發送成功,訂單沒有執行成功,需要回滾整個事務(訂單數據事務回滾,積分服務消費時,需要先反查事務狀態,若事務提交,才能插入積分記錄)。

事務消息是 RocketMQ 的高級特性之一 。這篇文章,筆者會從應用場景、功能原理、實戰例子三個模塊慢慢為你揭開事務消息的神秘面紗。

1 應用場景

舉一個電商場景的例子:用戶購物車結算時,系統會創建支付訂單。

用戶支付成功后支付訂單的狀態會由未支付修改為支付成功,然后系統給用戶增加積分。

通常我們會使用普通消費方案,該方案能夠發揮 MQ 的優勢:異步和解耦 ,  同時架構設計非常簡單。

圖片圖片

  1. 用戶購物車結算時,系統創建支付訂單;
  2. 支付成功后,更新訂單的狀態從未支付修改為支付成功;
  3. 發送一條普通消息到消息隊列服務端;
  4. 積分服務消費消息,添加積分記錄。

但該方案有個非常直觀的缺點:容易出現不一致的現象。

  1. 假如先發送消息,后修改訂單狀態,消息發送成功,訂單沒有執行成功,需要回滾整個事務(訂單數據事務回滾,積分服務消費時,需要先反查事務狀態,若事務提交,才能插入積分記錄)。
  2. 假如先修改訂單狀態,后發送消息,訂單狀態修改成功,但消息發送失敗,需要補償操作才能保持最終一致。
  3. 假如先修改訂單,后發送消息,訂單狀態修改成功,但消息發送超時,此時無法判斷需要回滾訂單還是提交訂單變更。

我們看到,為了完善普通消費方案,業務層還需要做到兩點:補償機制和提供事務狀態查詢接口。

要做到這兩點,難不難呢?

不難,但是業務層代碼會比較混亂,更優的方案還是得從中間件層面解決。

2 功能原理

RocketMQ 事務消息是支持在分布式場景下保障消息生產和本地事務的最終一致性。交互流程如下圖所示:

圖片圖片

1、生產者將消息發送至 Broker 。

2、Broker 將消息持久化成功之后,向生產者返回 Ack 確認消息已經發送成功,此時消息被標記為"暫不能投遞",這種狀態下的消息即為半事務消息。

3、生產者開始執行本地事務邏輯。

4、生產者根據本地事務執行結果向服務端提交二次確認結果( Commit 或是 Rollback ),Broker 收到確認結果后處理邏輯如下:

  • 二次確認結果為 Commit :Broker 將半事務消息標記為可投遞,并投遞給消費者。
  • 二次確認結果為 Rollback :Broker 將回滾事務,不會將半事務消息投遞給消費者。

5、在斷網或者是生產者應用重啟的特殊情況下,若 Broker 未收到發送者提交的二次確認結果,或 Broker 收到的二次確認結果為 Unknown 未知狀態,經過固定時間后,服務端將對消息生產者即生產者集群中任一生產者實例發起消息回查。

  1. 生產者收到消息回查后,需要檢查對應消息的本地事務執行的最終結果。
  2. 生產者根據檢查到的本地事務的最終狀態再次提交二次確認,服務端仍按照步驟4對半事務消息進行處理。

筆者認為事務消息的精髓在于:

  1. 本地事務執行成功,消費者才能消費事務消息;
  2. 消息回查本身就是補償機制的實現,事務生產者需提供了事務狀態查詢接口。

3 實戰例子

為了便于大家理解事務消息 ,筆者新建一個工程用于模擬支付訂單創建、支付成功、贈送積分的流程。

首先,我們創建一個真實的訂單主題:order-topic 。

圖片圖片

然后在數據庫中創建三張表 訂單表、事務日志表、積分表。

圖片圖片

最后我們創建一個 Demo 工程,生產者模塊用于創建支付訂單、修改支付訂單成功,消費者模塊用于新增積分記錄。

圖片圖片

接下來,我們展示事務消息的實現流程。

1、創建支付訂單

調用訂單生產者服務創建訂單接口 ,在 t_order 表中插入一條支付訂單記錄。

圖片圖片

2、調用生產者服務修改訂單狀態接口

接口的邏輯就是執行事務生產者的 sendMessageInTransaction  方法。

圖片圖片

生產者端需要配置事務生產者和事務監聽器。

圖片圖片

發送事務消息的方法內部包含三個步驟 :

圖片圖片

事務生產者首先發送半事務消息,發送成功后,生產者才開始執行本地事務邏輯。

事務監聽器實現了兩個功能:執行本地事務和供 Broker 回查事務狀態 。

圖片圖片

執行本地事務的邏輯內部就是執行 orderService.updateOrder 方法。

方法執行成功則返回 LocalTransactionState.COMMIT_MESSAGE , 若執行失敗則返回 LocalTransactionState.ROLLBACK_MESSAGE 。

圖片圖片

需要注意的是: orderService.updateOrder 方法添加了事務注解,并將修改訂單狀態和插入事務日志表放進一個事務內,避免訂單狀態和事務日志表的數據不一致。

最后,生產者根據本地事務執行結果向 Broker 提交二次確認結果。

Broker 收到生產者確認結果后處理邏輯如下:

  • 二次確認結果為 Commit :Broker 將半事務消息標記為可投遞,并投遞給消費者。
  • 二次確認結果為 Rollback :Broker 將回滾事務,不會將半事務消息投遞給消費者。

3、積分消費者消費消息,添加積分記錄

當 Broker 將半事務消息標記為可投遞時,積分消費者就可以開始消費主題 order-topic 的消息了。

圖片圖片

積分消費者服務,我們定義了消費者組名,以及訂閱主題和消費監聽器。

圖片圖片

在消費監聽器邏輯里,冪等非常重要 。當收到訂單信息后,首先判斷該訂單是否有積分記錄,若沒有記錄,才插入積分記錄。

而且我們在創建積分表時,訂單編號也是唯一鍵,數據庫中也必然不會存在相同訂單的多條積分記錄。

4 總結

RocketMQ 事務消息是支持在分布式場景下保障消息生產和本地事務的最終一致性。

編寫一個實戰例子并不復雜,但使用事務消息時需要注意如下三點:

1、事務生產者和消費者共同協作才能保證業務數據的最終一致性;

2、事務生產者需要實現事務監聽器,并且保存事務的執行結果(比如事務日志表) ;

3、消費者要保證冪等。消費失敗時,通過重試、告警+人工介入等手段保證消費結果正確。

筆者會在后續的文章里,詳細解析事務消息的實現原理,敬請期待。

實戰代碼地址:

https://github.com/makemyownlife/rocketmq4-learning

責任編輯:武曉燕 來源: 勇哥java實戰分享
相關推薦

2024-10-29 08:34:27

RocketMQ消息類型事務消息

2021-10-03 21:41:13

RocketMQKafkaPulsar

2021-04-15 09:17:01

SpringBootRocketMQ

2009-08-01 09:06:35

UbuntuOneLinux開源操作系統

2009-03-09 15:12:39

XenServer安裝

2024-02-04 09:02:29

RocketMQ項目處理器

2023-07-15 08:01:38

2023-09-04 08:00:53

提交事務消息

2010-11-22 10:31:17

Sencha touc

2011-05-30 15:12:10

App Invento 初體驗

2013-06-08 10:15:29

Outlook 201Outlook 201

2011-11-01 10:30:36

Node.js

2010-12-13 11:39:39

2011-08-02 10:26:59

iOS 多線程 線程

2011-09-15 15:03:10

2025-03-18 07:30:41

2009-11-30 10:09:02

谷歌Chrome OS

2022-07-04 11:06:02

RocketMQ事務消息實現

2013-05-28 10:22:03

2024-12-23 07:00:00

FastExcelEasyExcel開源框架
點贊
收藏

51CTO技術棧公眾號

国模冰冰炮一区二区| 三区精品视频观看| 欧美精品久久久久久久久46p| 亚洲伊人精品酒店| 91在线云播放| 精品国产一区二区三区久久久狼| 午夜激情影院在线观看| 欧美xxxhd| 国产精品久久二区二区| 国产精品免费在线| 中文字幕 视频一区| 欧美激情日韩| 国产亚洲欧美aaaa| 涩视频在线观看| 视频免费一区| 国产成人一区二区精品非洲| 色偷偷噜噜噜亚洲男人| 免费日韩中文字幕| 成人在线影视| 久久国产精品一区二区| 欧美激情一级二级| 国产91在线播放九色| 欧美日韩导航| 亚洲国产一区二区视频| 日韩一区国产在线观看| 人人妻人人玩人人澡人人爽| 久草中文综合在线| 国产91色在线免费| 黄色三级生活片| 精品综合久久88少妇激情| 欧美一区二区三区思思人| 成人亚洲视频在线观看| 色网在线免费观看| 亚洲超碰精品一区二区| 中文字幕一区二区三区四区五区人| 久青青在线观看视频国产| 成人黄色小视频在线观看| 91视频-88av| 中文字幕一区二区免费| 久久久久.com| 最新中文字幕亚洲| 精品无人区无码乱码毛片国产| 日韩三级影视| 丰满岳妇乱一区二区三区| 青草网在线观看| 伊人福利在线| 一区二区不卡在线播放| 日韩精品手机在线观看| 制服丝袜在线播放| 亚洲九九爱视频| 亚洲精品少妇一区二区| 中文字幕在线播放网址| 洋洋成人永久网站入口| 超碰10000| 亚洲制服国产| 国产一区免费电影| 亚洲精品系列| 久久夜精品香蕉| 国产人妻精品一区二区三区不卡| 亚洲欧美一级| 欧美精品一级二级| 性生生活大片免费看视频| 日韩精品第二页| 7777精品伊人久久久大香线蕉的| 手机av在线免费| 高清一区二区三区av| 欧美一区二区三区四区高清| 久久久久久久久久影视| 女同一区二区三区| 亚洲人成在线电影| 国产又粗又猛又爽又黄的视频四季| 成人一区二区| 中文字幕综合在线| 男的操女的网站| 亚洲免费黄色| 国产成人精品最新| 一区二区三区免费高清视频 | 欧美一区国产一区| 成年人在线视频| 综合久久一区二区三区| 久久人人爽人人爽人人av| 天堂av在线| 欧美老女人第四色| 亚洲v在线观看| 激情五月综合网| 欧美精品情趣视频| 日韩综合在线观看| 国产精品一区二区不卡| 欧美h视频在线| 好了av在线| 日韩欧美在线视频免费观看| 经典三级在线视频| 户外极限露出调教在线视频| 中文字幕一区二区5566日韩| 欧美视频在线观看视频| 成人精品国产| 一本大道综合伊人精品热热| 182午夜在线观看| 麻豆一区二区| 北条麻妃久久精品| 99久在线精品99re8热| 另类小说综合欧美亚洲| 久久99久久精品国产| 国产日产一区二区| 日本久久一区二区| 欧美大喷水吹潮合集在线观看| 成人久久综合| 91国偷自产一区二区三区的观看方式 | 色婷婷亚洲mv天堂mv在影片| 午夜精品美女自拍福到在线| 亚洲视频一区在线播放| 91麻豆文化传媒在线观看| 国产又黄又爽免费视频| 最新日韩三级| 日韩激情av在线免费观看| 小向美奈子av| 久久亚洲电影| eeuss一区二区三区| 日本激情视频在线观看| 91福利资源站| 欧洲一级黄色片| 国产精品第十页| 成人精品网站在线观看| 成人在线二区| 91成人在线观看喷潮| 在线观看免费视频黄| 亚洲乱码电影| 成人动漫网站在线观看| 黄网在线观看| 色婷婷久久久亚洲一区二区三区| 无码一区二区精品| 国内久久精品| 成人高清在线观看| 四虎影视国产在线视频| 日韩一区二区在线免费观看| 亚洲区一区二区三| 奇米一区二区三区| 91精品国产综合久久香蕉| 久草在线青青草| 色老汉一区二区三区| 永久免费成人代码| 久久久亚洲人| 品久久久久久久久久96高清| 偷拍精品精品一区二区三区| 亚洲欧美日韩久久久久久| 国产三级av片| 91免费视频网址| 日本中文字幕片| 婷婷久久综合九色综合99蜜桃| 在线观看国产精品淫| 日本丰满少妇做爰爽爽| 中文字幕乱码日本亚洲一区二区| 日本道在线视频| 精品欧美视频| 欧美另类极品videosbest最新版本 | 日韩欧美视频专区| 国产精品一区二区黑丝| 日韩av资源在线播放| 中文字幕一区二区三区精品| 91免费视频大全| 天堂社区在线视频| 久久裸体网站| 91丝袜脚交足在线播放| 欧美aaa免费| 日韩av在线精品| 亚洲另类在线观看| 亚洲国产精品ⅴa在线观看| 亚洲精品久久久久久宅男| 亚洲天堂免费| 韩国成人一区| 欧美va视频| 久久亚洲国产精品成人av秋霞| www.激情五月.com| 黄色一区二区在线| 伊人影院综合网| 国产精品亚洲综合一区在线观看| 欧美视频在线观看视频| 欧美少妇xxxx| 俄罗斯精品一区二区三区| 欧洲免费在线视频| 欧美影视一区二区三区| 美女的奶胸大爽爽大片| 91在线观看污| 国产免费中文字幕| 国产日本精品| 一级特黄录像免费播放全99| av综合网站| 国产精品日日做人人爱| 国产美女一区视频| 一区二区三区视频免费在线观看| 午夜精品无码一区二区三区| 欧美性猛交xxxx免费看久久久| 久久精品一区二区三区四区五区| 成人免费毛片高清视频| 亚洲成人天堂网| 亚洲激情综合| 手机成人av在线| 外国成人在线视频| 91传媒视频免费| 日韩和的一区二在线| 色综合五月天导航| 成在在线免费视频| 亚洲福利视频免费观看| 国产精品久久久久久免费免熟| 欧美日韩亚洲91| 潘金莲一级黄色片| 国产丝袜欧美中文另类| 国产xxx在线观看| 日日夜夜免费精品| 青青青青草视频| 一区二区中文字| 日韩影片在线播放| 日韩最新在线| 99国产在线| 亚洲精品大全| 国产精品老女人视频| 涩涩视频在线播放| 欧美激情国产精品| 黄色在线播放网站| 最近2019中文字幕大全第二页| 日本在线视频1区| 精品毛片乱码1区2区3区| 国产乱码精品一区二区三区精东| 91搞黄在线观看| 国产精品va无码一区二区三区| 亚洲成av人片一区二区| 全网免费在线播放视频入口| 国产精品免费观看视频| 福利片一区二区三区| 久久综合导航| 国产真实乱子伦| 一区二区三区福利| 欧美变态另类刺激| 最新日韩欧美| 日韩精品 欧美| 亚洲激情精品| 少妇高潮毛片色欲ava片| 亚洲天堂成人| 成品人视频ww入口| 亚洲高清网站| 无码人妻精品一区二区三区在线| 日韩视频二区| 日本免费不卡一区二区| 99精品热视频只有精品10| 成年人午夜免费视频| 亚洲欧洲日本mm| 久久久亚洲精品无码| 国产日韩欧美| 一本久道中文无码字幕av| 日韩av高清在线观看| 少妇一级淫免费放| 久久国产精品区| 日本一二三四区视频| 国产成人丝袜美腿| 国产女人18毛片水真多18| 972aa.com艺术欧美| 手机免费看av| 国产精品国产a级| 日本青青草视频| 亚洲成在人线免费| 国产欧美一区二区三区在线看蜜臂| 日韩欧美亚洲一二三区| 探花国产精品一区二区| 欧美久久一二三四区| www男人的天堂| 日韩精品极品视频| 爱久久·www| 成年人精品视频| bl在线肉h视频大尺度| 日韩视频一区在线| 男女羞羞视频在线观看| 欧美亚洲在线播放| 欧美日韩视频免费看| 亚洲自拍偷拍色片视频| 秋霞影视一区二区三区| 日日夜夜精品网站| 很黄很黄激情成人| 白嫩少妇丰满一区二区| 老司机精品视频在线| 国产a√精品区二区三区四区| 99久久精品国产麻豆演员表| 免费黄在线观看| 伊人开心综合网| 91video| 91 com成人网| 色鬼7777久久| 久久综合电影一区| 欧美美女日韩| 亚洲最大福利视频| av一区二区高清| a级免费在线观看| 蜜臀精品一区二区三区在线观看| 香蕉视频1024| 国产精品水嫩水嫩| 久久久久久久久久免费视频| 欧美日本一区二区在线观看| 亚洲欧洲综合在线| 久久国产精品久久国产精品| 综合久久2023| 不卡一卡2卡3卡4卡精品在| 成人婷婷网色偷偷亚洲男人的天堂| 国产传媒久久久| 久久精品国产亚洲一区二区三区| 亚洲图片欧美另类| 国产精品传媒视频| 欧美a视频在线观看| 亚洲精品在线观看视频| 九色porny丨首页在线| 国产精品扒开腿做爽爽爽男男 | 在线成人av网站| 欧美另类自拍| 韩剧1988免费观看全集| 国产视频网站一区二区三区| 日韩精品无码一区二区三区| 国产精品毛片一区二区三区| 中文字幕 欧美 日韩| 中文一区二区完整视频在线观看| 国产农村妇女aaaaa视频| 精品欧美一区二区三区精品久久| 三级外国片在线观看视频| 国产成人亚洲综合| 亚洲调教一区| 欧美三级一级片| va亚洲va日韩不卡在线观看| 青青草原在线免费观看视频| 欧美精品一级二级三级| 在线观看a视频| 国产精品白嫩美女在线观看| 日韩精品丝袜美腿| 波多野结衣综合网| 不卡av电影在线播放| 国产无码精品在线观看| 日韩欧美高清dvd碟片| 欧美一级一区二区三区| 久久99国产精品自在自在app| 国产一区二区三区亚洲综合| 色中文字幕在线观看| 精品一区二区三区在线观看| 国产视频123区| 欧美区在线观看| 麻豆传媒在线完整视频| 成人免费直播live| 91精品国产调教在线观看| 日韩精品aaa| 一区二区三区欧美日| 不卡av中文字幕| 韩国精品美女www爽爽爽视频| 激情av综合| 久久国产亚洲精品无码| 久久青草国产手机看片福利盒子| 老熟妇一区二区| 欧洲色大大久久| 欧美人xxx| 亚洲自拍偷拍第一页| 欧美午夜国产| 国产人妻人伦精品1国产丝袜| 欧美日韩一区二区免费视频| 免费在线性爱视频| 国产精品无码专区在线观看| 亚洲h色精品| 精品伦一区二区三区| 无吗不卡中文字幕| 成人免费视频| 亚洲free性xxxx护士白浆| 影音先锋一区| 亚洲一区视频在线播放| 欧美精品视频www在线观看 | 欧美孕妇孕交| 国产日本欧美一区| 欧美精品国产一区二区| 黄色a一级视频| 欧美午夜精品久久久久久超碰| 国产一二区在线| 精品欧美一区二区久久久伦| 日韩av中文字幕一区二区| 欧美三级黄色大片| 日韩成人免费视频| 色综合久久久| 18禁网站免费无遮挡无码中文| 国产色综合久久| www.亚洲天堂.com| 国产精品99免视看9| 欧美国产高清| mm131美女视频| 日韩一区二区精品| xxx欧美xxx| 特级西西人体www高清大胆| 久久亚洲二区三区| jlzzjlzzjlzz亚洲人| 久久九九全国免费精品观看| 99ri日韩精品视频| 亚洲一级片免费| 无码av免费一区二区三区试看| av每日在线更新| 久久精品magnetxturnbtih| 狠狠色狠狠色合久久伊人| 中文字幕激情小说| 久热国产精品视频| 成人短片线上看| xxxx黄色片|