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

RocketMQ事務消息解析!

開發 架構
事務消息是 RocketMQ 提供的一種消息類型,支持在分布式場景下保障消息生產和本地事務的最終一致性。RocketMQ?采用了2PC的思想來實現了提交事務消息,同時增加一個補償邏輯來處理二階段超時或者失敗的消息。

單體架構下的事務

在單體系統的開發過程中,假如某個場景下需要對數據庫的多張表進行操作,為了保證數據的一致性,一般會使用事務,將所有的操作全部提交或者在出錯的時候全部回滾。

以創建訂單為例,假設下單后需要做兩個操作:

?在訂單表生成訂單。

在積分表增加本次訂單增加的積分記錄。

在單體架構下只需使用@Transactional開啟事務,就可以保證數據的一致性。

@Transactional
    public void order() {
        String orderId = UUID.randomUUID().toString();
        // 生成訂單
        orderService.createOrder(orderId);
        // 增加積分
        creditService.addCredits(orderId);
    }

?

但在分布式架構下,訂單系統和積分系統可能是兩個獨立的服務,此時就不能使用上述的方法開啟事務了,因為它們不處于同一個事務中。

  • 在出錯的情況下,無法進行全部回滾,只能對當前服務的事務進行回滾。

所以就有可能出現訂單生成成功但是積分服務增加積分失敗的情況(也可能相反),此時數據處于不一致的狀態。

分布式架構下的事務

以下單流程為例,在分布式架構下的處理流程如下:

?訂單服務生成訂單。

發送訂單生成的MQ消息,積分服務訂閱消息,有新的訂單生成之后消費消息,增加對應的積分記錄。

普通MQ消息存在的問題

?假如訂單創建成功,MQ消息發送成功,但是order方法在返回的前一刻,服務突然宕機。

由于開啟了事務,事務還未提交(方法結束后才會正常提交)。

所以訂單表并未生成記錄,但是MQ卻已經發送成功并且被積分服務消費,此時就會存在訂單未創建但是積分記錄增加的情況。

假如先發送MQ消息再創建訂單,如果MQ消息發送成功,創建訂單失敗,那么同樣處于不一致的狀態。

@Transactional
    public void order() {
        String orderId = UUID.randomUUID().toString();
        // 創建訂單
        Order order = orderService.createOrder(orderDTO.getOrderId());
        // 發送訂單創建的MQ消息
        sendOrderMessge(order);
        return;
    }

可以使用RocketMQ事務消息解決上述問題。

RocketMQ事務消息基礎流程

?Apache RocketMQ在4.3.0版中已經支持分布式事務消息。

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

RocketMQ采用了2PC的思想來實現了提交事務消息,同時增加一個補償邏輯來處理二階段超時或者失敗的消息。

基本流程

?第一階段

  • 發送 Message,Half Message,即半事務消息。
  • 此類型的 Message 是不會被 Consumer 消費。

第二階段:如果半事務消息投遞成功,則會開始執行本地事務。

分為如下三種 Case:

  • 本地事務執行成功:
  • 會向 Broker 發送 commit 消息,被 commit 過后的 Message 才能被 Consumer 消費到。
  • 本地事務執行失敗:
  • 會向 Broker 發送 rollback 消息,Broker 則會將剛剛投遞的半事務消息刪除,從而保證上下游數據的一致性。

  • 如果 Producer 實例或者網絡出現了問題,Producer 沒能及時地將本地事務執行的結果通知 Broker。

  • Broker 會通過掃描發現某條 Message 長時間處于半事務消息狀態。

  • Broker 會主動地向 Producer 詢問此 Message 對應的事務狀態。

值得注意的是:

?

RocketMQ 并不會無休止的的信息事務狀態回查,默認回查 15 次。

如果 15 次回查還是無法得知事務狀態,RocketMQ 默認回滾該消息。

RocketMQ事務消息使用限制

?

事務消息不支持延時消息和批量消息。

事務性消息可能不止一次被檢查或消費,所以消費者端需要做好消費冪等。

事務消息的生產者 ID 不能與其他類型消息的生產者 ID 共享。

  • 與其他類型的消息不同,事務消息允許反向查詢、MQ服務器能通過它們的生產者 ID 查詢到消費者。

RocketMQ事務消息基本原理

采用2PC兩階段設計。

?

將 Message 原本真實的 Topic 和 MessageQueue 進行備份。

  • 放入到PROPERTY_REAL_TOPIC、PROPERTY_REAL_QUEUE_ID中保存。

將消息投遞到一個內部Topic中RMQ_SYS_TRANS_HALF_TOPIC,該隊列專門存儲事務消息。

所有的 Half Message 全部都寫入到 queueId 為 0 的 MessageQueue。

因為一個 Topic 下只有 1 個 MessageQueue:

  • 這個 Topic 下的所有 Message 就是全局有序的,它們會按照先來后到的順序被消費。

如果本地事務執行成功進行Commit,則將RMQ_SYS_TRANS_HALF_TOPIC 隊列中的消息投遞到真實的Topic中,供后續流程執行。

  • 并刪除這條 Half Message ,但刪除也是假刪除,只是給 Message 打上一個刪除的 Tag。

如果本地事務執行失敗進行rollback,則直接刪除這條 Half Message ,但刪除也是假刪除。

如果本地事務遲遲沒有返回結果 (默認時間是6s),則會觸發事務回查機制

  • 執行回查之前需要校驗檢查次數是否到達了最大值(需要手動設置,沒有默認值)。
  • 或者是當前 Half Message 存在是否超過了 Message 保存的上限,即 3天。
  • 如果滿足上面條件中的一種Half Message 會被放進 TRANS_CHECK_MAX_TIME_TOPIC Topic 當中。
  • 一旦判定為需要執行事務回查邏輯,那么當前這條 Half Message 就算已經被消費了。
  • 在沒達到最大的校驗次數之前,都還需要將其投遞到事務隊列當中,以便下次重試時再次執行 Check 邏輯。
  • 如果回查成功則刪除投遞的 Half Message。

源碼解讀

發送事務消息調用的是TransactionMQProducer的sendMessageInTransaction方法:

主要有以下幾個步驟:

?獲取事務監聽器TransactionListener,如果獲取為空或者本地事務執行器LocalTransactionExecuter為空將拋出異常。

因為需要通過TransactionListener或者LocalTransactionExecuter來執行本地事務,所以不能為空。

在消息中設置prepared屬性,此時與普通消息(非事務消息)相比多了PROPERTY_TRANSACTION_PREPARED屬性。

調用send方法發送prepared消息也就是half消息,發送消息的流程與普通消息一致。

根據消息的發送結果判斷:

  • 如果發送成功執行本地事務,并返回本地事務執行結果狀態,如果返回的執行狀態結果為空,將本地事務狀態設置為UNKNOW。
  • 發送成功之外的其他情況,包括FLUSH_DISK_TIMEOUT刷盤超時、FLUSH_SLAVE_TIMEOUT和SLAVE_NOT_AVAILABLE從節點不可用三種情況。
  • 此時意味著half消息發送失敗,本地事務狀態置為ROLLBACK_MESSAGE回滾消息。

調用endTransaction方法結束事務。

參考

《RocketMQ技術內幕》

https://github.com/apache/rocketmq/blob/master/docs/cn/RocketMQ_Example.md。

https://github.com/apache/rocketmq/blob/master/docs/cn/design.md。

責任編輯:姜華 來源: 月伴飛魚
相關推薦

2023-07-17 08:34:03

RocketMQ消息初體驗

2024-11-11 13:28:11

RocketMQ消息類型FIFO

2021-10-03 21:41:13

RocketMQKafkaPulsar

2021-04-15 09:17:01

SpringBootRocketMQ

2024-09-25 08:32:05

2024-08-22 18:49:23

2024-02-04 09:02:29

RocketMQ項目處理器

2023-09-04 08:00:53

提交事務消息

2024-10-11 09:15:33

2022-07-04 11:06:02

RocketMQ事務消息實現

2024-06-13 09:25:14

2024-10-22 08:01:15

2021-03-04 06:49:53

RocketMQ事務

2022-12-22 10:03:18

消息集成

2022-06-02 08:21:07

RocketMQ消息中間件

2023-07-18 09:03:01

RocketMQ場景消息

2025-04-09 08:20:00

RocketMQ消息隊列開發

2022-03-31 08:26:44

RocketMQ消息排查

2023-12-21 08:01:41

RocketMQ消息堆積

2021-07-14 17:18:14

RocketMQ消息分布式
點贊
收藏

51CTO技術棧公眾號

av中文字幕一区二区三区| 久久中文字幕无码| 久久亚洲精品中文字幕| 亚洲欧美日韩中文播放| 超碰97在线资源| 一区二区三区福利视频| 成人免费a**址| 日韩精品一区二区三区视频播放 | mm131国产精品| 影院在线观看全集免费观看| 97超碰欧美中文字幕| 国产精品久久中文| 国产在线欧美在线| 成人羞羞动漫| 亚洲国产日韩一区| 网站在线你懂的| 高清在线视频不卡| 中文字幕一区二区三区四区| 韩日午夜在线资源一区二区| 亚洲av人无码激艳猛片服务器| 欧美一区网站| 亚洲视频国产视频| 国产日韩视频一区| 福利一区视频| 岛国精品视频在线播放| 亚洲欧洲精品一区二区| 天天干免费视频| 国产九九视频一区二区三区| 国产成人久久久| 精品少妇久久久| 久久成人综合| 伊人一区二区三区久久精品| 无码人妻精品一区二区三区温州| 欧美精品三级在线| 欧美日本在线看| 成人午夜视频免费在线观看| 高h视频在线播放| 亚洲柠檬福利资源导航| 亚洲高清视频一区二区| 视频一区二区在线播放| 成人av午夜影院| 亚洲影院高清在线| 91 中文字幕| 麻豆精品精品国产自在97香蕉| 日韩av电影国产| 久久精品国产成人av| 亚洲精品护士| 久久免费成人精品视频| 欧美激情一区二区视频| 亚洲情侣在线| 欧美大成色www永久网站婷| 69夜色精品国产69乱| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 久草精品在线播放| 乱馆动漫1~6集在线观看| 亚洲天堂免费在线观看视频| 日本一区精品| 麻豆国产在线播放| 97成人超碰视| 美女黄毛**国产精品啪啪| 亚洲精品国产av| 久久99精品久久久久| 日本精品久久久久影院| 日本特黄一级片| 精品91在线| 久久久久久久久国产| 国产性xxxx| 在线国产一区二区| 久久在线免费视频| 国产精品国产三级国产传播| 欧美国产一级| 日韩在线中文字| 国产在线免费av| 久久综合88| 色婷婷综合久久久久| 日韩精品视频一区二区| 99re8这里有精品热视频免费 | 国产精区一区二区| 9191国产精品| 91免费视频污| 国产区一区二| 欧美本精品男人aⅴ天堂| 国产黄色一区二区三区| 日本高清久久| 精品国产乱子伦一区| 人妻av一区二区| 欧美电影完整版在线观看| 亚洲福利视频在线| 波多野结衣一本| 欧美欧美黄在线二区| 国产午夜精品全部视频播放| 毛片视频免费播放| 亚洲破处大片| 91精品国产91久久久久久最新| 黄网在线观看视频| 日本不卡123| 91在线免费网站| 男人天堂av网| 久久伊人中文字幕| 一区二区日本伦理| 欧美卡一卡二| 欧洲日韩一区二区三区| 中文字幕avav| 九九亚洲视频| 久久久精品国产网站| 国产大片中文字幕| 久久久一二三| 91在线免费观看网站| 黄色三级网站在线观看| 91在线观看免费视频| 亚洲欧美电影在线观看| 先锋成人av| 色诱亚洲精品久久久久久| 久久国产精品国产精品| 成人h动漫免费观看网站| 亚洲欧美日韩精品久久| 成人免费无遮挡无码黄漫视频| 亚洲成av人电影| 97超级碰碰碰| 国产强伦人妻毛片| 91丨九色丨国产丨porny| 亚洲综合第一| 精品三级久久| 欧美福利一区二区| 亚洲欧美日本一区| 91一区二区| 欧美一级片一区| a级片免费观看| 久久久影院官网| 人妻无码一区二区三区四区| 欧美一区久久久| 91精品综合久久久久久| 一区二区三区四区免费| 欧美不卡视频| 国产免费一区二区三区在线能观看 | 精品久久毛片| 日韩av中文字幕在线免费观看| 国产又粗又猛又爽又黄的视频四季 | 亚洲国产成人爱av在线播放| 干b视频在线观看| 国产尤物精品| 成人激情视频在线播放| 美女欧美视频在线观看免费| 午夜不卡在线视频| 永久看看免费大片| 日韩系列欧美系列| 国产精品精品国产| 日本一级在线观看| 亚洲成人激情综合网| www.com久久久| 日韩福利视频一区| 国语自产精品视频在线看抢先版图片 | 亚洲精品电影在线观看| 青青操在线视频观看| 青椒成人免费视频| 午夜精品福利一区二区| 日本久久免费| 亚洲精品中文字幕av| 日韩网红少妇无码视频香港| 国产成人在线观看免费网站| 日韩视频在线免费播放| 日韩精品第二页| 日韩在线欧美在线国产在线| 日本丰满少妇做爰爽爽| 国产亚洲欧美色| 蜜臀av午夜一区二区三区| 宅男在线一区| 日产精品久久久一区二区福利| 水莓100国产免费av在线播放| 午夜一区二区三区在线观看| 天天插天天射天天干| 日韩一级精品| 乱一区二区三区在线播放| 色在线中文字幕| 亚洲毛片在线观看| 中文字幕在线欧美| 国产日韩影视精品| 8x8x最新地址| 99久久这里只有精品| 成人动漫网站在线观看| 黄色免费在线观看| 日韩欧美电影一区| 国产午夜精品无码一区二区| 99久久久国产精品| 欧美综合在线播放| 成人精品天堂一区二区三区| 国产美女久久精品| 性欧美ⅴideo另类hd| 亚洲成**性毛茸茸| 欧美日韩综合一区二区三区| 国产无一区二区| 国产九九在线观看| 亚洲国产老妈| 国产精品有限公司| 桃花岛tv亚洲品质| 国产一区二区动漫| 中文字幕日本人妻久久久免费| 亚洲视频在线一区二区| 国产在线观看免费播放| 亚洲综合社区| 国产av不卡一区二区| 女同久久另类99精品国产| 日韩美女免费视频| 色影院视频在线| 欧美mv日韩mv国产网站| 91在线视频在线观看| 中文欧美字幕免费| 无码人妻aⅴ一区二区三区玉蒲团| 亚洲理伦在线| 99精品视频网站| 羞羞色国产精品网站| 国产精品一区二区久久久| 欧美韩日亚洲| 亚洲人成欧美中文字幕| 国产伦理吴梦梦伦理| 亚洲va国产va欧美va观看| 波多野结衣一二三四区| 丁香婷婷综合五月| 少妇一级淫免费放| 亚洲精品国产日韩| 欧美日韩在线观看一区| 国产成人福利av| 国产免费一区视频观看免费| 2021天堂中文幕一二区在线观| 亚洲最新中文字幕| 色综合免费视频| 欧美一区二区三区小说| 国产无遮挡又黄又爽| 亚洲欧美另类在线| 久久成人激情视频| 福利一区二区在线观看| 91n.com在线观看| 亚洲天堂黄色| 天堂8在线天堂资源bt| 成人高清电影网站| 欧美大香线蕉线伊人久久国产精品 | 大奶在线精品| 国产精品一区二区3区| heyzo在线欧美播放| 久久久av电影| 98在线视频| 亚洲精选中文字幕| 日韩一级中文字幕| 欧美成人在线直播| 99精品久久久久久中文字幕| 在线免费观看成人短视频| 国产精品500部| 一区二区三区精品在线| 91禁男男在线观看| 中文字幕五月欧美| 黄色av片三级三级三级免费看| 91在线一区二区| 无码人妻丰满熟妇啪啪网站| 国产精品一区二区视频| 日本人69视频| 麻豆精品久久精品色综合| 999香蕉视频| 亚洲影院一区| 日韩av资源在线| 国产日产高清欧美一区二区三区| 宅男一区二区三区| 婷婷激情图片久久| 宅男av一区二区三区| 午夜精品毛片| 在线视频亚洲自拍| 91精品1区| 午夜啪啪福利视频| 欧美+日本+国产+在线a∨观看| 中文字幕在线亚洲三区| 欧美极品在线观看| 久久精品国产精品国产精品污| 深爱激情综合| 亚洲国产午夜伦理片大全在线观看网站 | 懂色av.com| 精品久久久久久中文字幕大豆网| 国产精品成人av久久| 亚洲成av人在线观看| 日本熟妇色xxxxx日本免费看| 亚洲成人免费在线| 草久视频在线观看| 日本韩国精品在线| 日本中文在线播放| 日韩欧美国产网站| 国产精品第6页| 欧美日韩精品欧美日韩精品一综合 | 欧美电影免费播放| 欧美一区二区视频在线播放| 亚洲高清久久| 国产偷人视频免费| 免费高清在线视频一区·| 色呦色呦色精品| 国产成人免费视频一区| 丰满大乳奶做爰ⅹxx视频| www国产成人| 欧美性生给视频| 一二三区精品视频| 成年人午夜视频| 欧美区在线观看| 性猛交xxxx乱大交孕妇印度| 亚洲国产欧美一区二区三区同亚洲| 手机亚洲第一页| 日韩在线欧美在线国产在线| 男插女视频久久久| 国产精品成人免费视频| 欧一区二区三区| 欧美二区在线看| 亚洲大全视频| 不卡av免费在线| 国产成人av福利| 欧美做受xxxxxⅹ性视频| 亚洲啪啪综合av一区二区三区| 国产手机在线视频| 欧美另类videos死尸| 国产成人无码www免费视频播放| 精品在线观看国产| 91麻豆一二三四在线| 日本中文字幕久久看| 日韩黄色三级在线观看| 欧洲在线视频一区| 好吊日精品视频| 亚洲美女爱爱视频| 26uuu国产在线精品一区二区| 美女的奶胸大爽爽大片| 色婷婷国产精品| 性生活视频软件| 一区二区三区亚洲| 18videosex性欧美麻豆| 日韩免费在线免费观看| 无码人妻精品一区二区三应用大全| 蜜臀精品一区二区三区在线观看 | 亚洲国产成人tv| 伊人久久成人网| 亚洲人在线观看| 超碰在线最新网址| 产国精品偷在线| 91成人精品视频| www.国产区| av一区二区三区| 欧美黄色免费看| 欧美电影影音先锋| se在线电影| 国产成人一区二区三区小说 | 超碰97在线资源| 99九九热只有国产精品| 苍井空浴缸大战猛男120分钟| 国产一区在线视频| 国产aaaaaaaaa| 欧美午夜一区二区| 日韩午夜影院| 97成人在线视频| jizz性欧美23| www.成年人视频| 国产一区二区三区美女| 亚洲永久精品ww.7491进入| 亚洲成人在线网站| 日本黄色三级视频| 欧美激情中文字幕在线| 看亚洲a级一级毛片| 中文字幕日韩一区二区三区不卡| 日本女人一区二区三区| 欧美人妻一区二区三区| 色狠狠色狠狠综合| 懂色一区二区三区| 国产精品人成电影在线观看| 狠狠色狠狠色综合婷婷tag| 欧美激情国产精品日韩| 国产亚洲欧美一区在线观看| 天天爱天天做天天爽| 一区二区欧美日韩视频| 99riav视频一区二区| 亚洲精蜜桃久在线| 水野朝阳av一区二区三区| 免费成人深夜夜行网站| 在线综合亚洲欧美在线视频| 成人黄视频在线观看| 96国产粉嫩美女| 国产精品hd| 青青草视频网站| 精品久久久久久久久久ntr影视 | 国产99久久久国产精品免费看| 青青草偷拍视频| 精品噜噜噜噜久久久久久久久试看| 超清av在线| 久久影院理伦片| 奇米四色…亚洲| 青青草原在线免费观看视频| 日韩一区二区三区视频在线观看| 欧美1234区| 久久99精品久久久久久三级 | 92精品国产成人观看免费| 日本a级c片免费看三区| 色噜噜狠狠色综合网图区 | 97伦理在线四区| 在线免费高清一区二区三区| 醉酒壮男gay强迫野外xx| 欧洲色大大久久| 精精国产xxx在线视频app| 日韩jizzz| 国产麻豆成人精品| 成年免费在线观看|