訊息佇列的方式 解決分布式事務 demo

2021-10-06 14:18:43 字數 1008 閱讀 2713

將分布式事務拆分成兩個本地事務,對於事務發起方,可理解為生產者,我們只需要保證本地事務和傳送訊息 這兩個動作的一致性,對於事務的另一方可理解為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訊息服務 見第二篇 大型 架構系列 分布式訊息佇列 二 常用訊息佇列 見第二篇 大型 架構系列 分布式訊息佇列 二 參考 推薦 資料 見第二...