將分布式事務拆分成兩個本地事務,對於事務發起方,可理解為生產者,我們只需要保證本地事務和傳送訊息 這兩個動作的一致性,對於事務的另一方可理解為mq 訊息的消費者,直需要保證成功消費訊息即可。若失敗,可重試,可以設定乙個重試次數,達到了就人工干預(畢竟這種情況比較小)。
直接上**:生產者
public
class
testtransactionproducer
catch
(exception e)
}@override
public localtransactionstate checklocaltransaction
(messageext messageext)};
//本地事務執行器
producer.
settransactionlistener
(listener)
;try
catch
(mqclientexception e)
}}
消費者:
public
static
void
main
(string[
] args)
throws mqclientexception
//返回消費狀態
//consume_success 消費成功
//reconsume_later 消費失敗,若消費失敗,相當於告訴broker 消費失敗了,訊息你別丟,一會兒我再來消費,自動重試的。
return consumeconcurrentlystatus.consume_success;}}
);//呼叫start()方法啟動consumer
consumer.
start()
; system.out.
println
("consumer started........");
}
訊息佇列實現分布式事務
訊息佇列中的 事務 主要解決的是訊息生產者和訊息消費者的資料一致性問題。電商下單步驟 1 生成訂單 2 刪除購物車 在分布式系統中,任何乙個步驟都有可能失敗,可能出現訂單資料與購物車資料不一致的情況,比如說 1 建立了訂單,沒有清理購物車 2 訂單沒建立成功,購物車裡面的商品卻被清掉了。訂單系統給訊...
分布式事務解決方案之訊息佇列
本方案是將分布式事務拆分成多個本地事務來完成,並且由訊息佇列非同步協調完成,如下圖 下邊以下單減少庫存為例來說明 1 訂單服務和庫存服務完成檢查和預留資源。2 訂單服務在本地事務中完成新增訂單表記錄和新增 減少庫存任務訊息 3 由定時任務根據訊息表的記錄傳送給 mq通知庫存服務執行減庫存操作。4 庫...
分布式訊息佇列
以下是訊息佇列以下的大綱,本文主要介紹訊息佇列概述,訊息佇列應用場景和訊息中介軟體示例 電商,日誌系統 訊息佇列概述 訊息佇列應用場景 訊息中介軟體示例 jms訊息服務 見第二篇 大型 架構系列 分布式訊息佇列 二 常用訊息佇列 見第二篇 大型 架構系列 分布式訊息佇列 二 參考 推薦 資料 見第二...