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

京東二面:如何利用RocketMQ事務消息,來實現分布式事務?比如下單清空購物車的場景

云計算 分布式
分布式事務是指在多個獨立的系統或數據庫之間執行的事務操作,它確保所有參與者要么全部成功提交,要么全部回滾,以維持數據一致性。

前言

大家好,我是田螺。

分享一道京東的場景面試題:如何利用RocketMQ事務消息實現分布式事務?比如下單清空購物車場景。

我們如何更好回答這個問題呢?可以按照以下這幾個維度:

  • 什么是分布式事務?
  • 一條普通消息,從產生到消費歷程
  • 消息隊列的事務消息流程
  • 事務消息的下單清空購物車場景

1. 什么是分布式事務

分布式事務是指在多個獨立的系統或數據庫之間執行的事務操作,它確保所有參與者要么全部成功提交,要么全部回滾,以維持數據一致性。

通常保證分布式事務的方案有:消息隊列的事務消息、TCC(Try-Confirm-Cancel)模式、Seata、二階段提交等。

2.一條消息從產生到消費歷程

我們先來看看:RocketMQ的一條普通的消息,從產生到被消費,經歷的流程:

圖片圖片

  • 生產者產生消息,發送到MQ服務器(Broker)
  • MQ服務器收到消息后,將消息持久化到存儲系統。
  • MQ服務器返回ACk到生產者。
  • 消費者從MQ服務器(Broker)拉取消息(Pull或Push,可以配置的)
  • 消費者消費完消息,響應ACK
  • MQ服務器收到ACK,認為消息消費成功,即在存儲中刪除消息。

其實,在RocketMQ中,消費完消息后,消息不會立即被刪除,而是根據消息的過期時間和消費進度進行管理。消費者確認消費后,RocketMQ會記錄該消息的消費狀態,并在達到設定的過期時間后,從存儲中刪除該消息。這種機制確保了消息的可靠性和持久性。

3. 消息隊列的事務消息流程

在開始之前,我們先來了解一下,什么是半消息?

這個半消息,它不是說消息內容不完整,它包含的內容就是完整的消息內容。它跟普通消息的唯一區別是,在事務提交之前,對于消費者來說,這個消息是不可見的。

圖片圖片

  1. 生產者產生消息,發送一條半消息到MQ服務器。
  2. MQ收到消息后,將消息持久化到存儲系統,這條消息的狀態是待發送狀態。
  3. MQ服務器返回ACK確認到生產者。
  4. 生產者執行本地事務
  5. 如果本地事務執行成功,即commit執行結果到MQ服務器;如果執行失敗,發送rollback。
  6. 如果是正常的commit,MQ服務器更新消息狀態為可發送;如果是rollback,即刪除消息。
  7. 如果消息狀態更新為可發送,則MQ服務器會push消息(可配置push還是pull)給消費者。消費者消費完就回ACK。
  8. 如果MQ服務器長時間沒有收到生產者的commit或者rollback,它會反查生產者,然后根據查詢到的結果執行最終狀態。

4. 事務消息下的單清空購物車場景

我們看下,下訂單清空購物車的例子吧。訂單系統創建完訂單后,然后發消息給下游系統的購物車系統,清空購物車。

  1. 生產者(訂單系統)產生消息,發送一條半消息到MQ服務器
  2. MQ收到消息后,將消息持久化到存儲系統,這條消息的狀態是待發送狀態。
  3. MQ服務器返回ACK確認到生產者,此時MQ不會觸發消息推送事件
  4. 生產者執行本地事務(訂單創建成功,提交事務消息)
  5. 如果本地事務執行成功,即commit執行結果到MQ服務器;如果執行失敗,發送rollback。
  6. 如果是commit正常提交,MQ服務器更新消息狀態為可發送;如果是rollback,即刪除消息。
  7. 如果消息狀態更新為可發送,則MQ服務器會push消息給消費者(購物車系統)。消費者消費完(即拿到訂單消息,清空購物車成功)就應答ACK。
  8. 如果MQ服務器長時間沒有收到生產者的commit或者rollback,它會反查生產者,然后根據查詢到的結果(回滾操作或者重新發送消息)執行最終狀態。

有些伙伴可能有疑惑,如果消費者消費失敗怎么辦呢?那數據是不是不一致啦?所以就需要消費者消費成功,執行業務邏輯成功,再反饋ack嘛。如果消費者消費失敗,那就自動重試嘛,接口支持冪等即可。

責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2024-06-13 09:25:14

2024-01-26 13:17:00

rollbackMQ訂單系統

2025-04-29 04:00:00

分布式事務事務消息

2022-06-27 08:21:05

Seata分布式事務微服務

2023-12-26 08:59:52

分布式場景事務機制

2022-09-13 16:01:13

購物車京東接口

2022-06-21 08:27:22

Seata分布式事務

2017-07-26 15:08:05

大數據分布式事務

2022-08-26 00:02:03

RocketMQ單體架構MQ

2020-03-31 08:05:23

分布式開發技術

2021-12-15 10:00:21

分布式事務框架

2025-06-11 08:01:06

2024-06-07 08:06:36

2025-06-04 01:00:00

2024-10-29 08:34:27

RocketMQ消息類型事務消息

2009-06-19 15:28:31

JDBC分布式事務

2009-09-18 15:10:13

分布式事務LINQ TO SQL

2021-09-29 09:07:37

分布式架構系統

2022-06-14 10:47:00

分布式事務數據

2018-05-28 09:53:12

京東購物車Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区久久久 | 密室大逃脱第六季大神版在线观看 | 精精国产xxxx视频在线播放7 | 国产一区中文字幕 | 男人天堂色 | 二区三区在线观看 | 国产色黄| 成人av一区二区亚洲精 | 久久久这里只有17精品 | 久草精品视频 | 国产农村妇女精品一二区 | 狠狠躁夜夜躁人人爽天天高潮 | 日韩精品在线网站 | 久久久久成人精品亚洲国产 | 国产丝袜一区二区三区免费视频 | 国产高清在线观看 | 伦理午夜电影免费观看 | 成人不卡一区二区 | 国产精品久久久久久久久久免费看 | 日本一二三区电影 | 精品一区二区三区av | 91资源在线观看 | 日本成人中文字幕 | 精品国产免费一区二区三区五区 | 美女一级a毛片免费观看97 | 成人一级视频在线观看 | 国产一级片网站 | 观看av| av一级在线观看 | 国产区在线观看 | 亚洲一区二区三区免费在线 | 国产精品久久久久久影视 | 国产一区二区三区四区五区加勒比 | 久久一区二区三区电影 | 亚洲国产成人久久久 | 久久久久久国产精品久久 | 久久无毛| 精品一区二区三区四区五区 | 国产精品美女久久久 | 日韩第一夜 | 最新中文字幕久久 |