該樣例工程介紹 AT 模式下,Spring Cloud 框架如何通過 GTS 保證跨數(shù)據(jù)庫轉(zhuǎn)賬的分布式事務(wù)的一致性。
前提條件
在使用樣例前,請先完成以下工作:
- 準(zhǔn)備兩個(gè) RDS 實(shí)例,用戶創(chuàng)建數(shù)據(jù)庫。
- 準(zhǔn)備一個(gè) ECS 實(shí)例,用于部署本樣例。
樣例邏輯說明
模擬轉(zhuǎn)賬業(yè)務(wù),從 A 賬戶扣款給 B 賬戶打款。應(yīng)用程序通過調(diào)用扣款微服務(wù)和存款微服務(wù)完成轉(zhuǎn)賬業(yè)務(wù)。
- eureka-locator:微服務(wù)的注冊中心
- eureka-consumer:應(yīng)用程序
- eureka-provider:扣款服務(wù)
- eureka-provider2:存款服務(wù)
搭建樣例
- 初始化數(shù)據(jù)庫。
- 分別在兩個(gè)數(shù)據(jù)庫執(zhí)行 txc_undo_log.sql,創(chuàng)建 txc_undo_log 表。
- 分別在兩個(gè)數(shù)據(jù)庫執(zhí)行 txc_sample_springcloud.sql 中的相關(guān)命令,創(chuàng)建 account 表。
- 下載樣例 txc-yun-sample并上傳到 ECS 上。
- 修改樣例配置。
- 分別找到并打開 sample-txc-springcloud 樣例下 eureka-consumer、eureka-provider 和 eureka-provider2 三個(gè)文件中的 config.java 文件,在 txcTransactionScaner 方法中修改 GTS 的事務(wù)分組名稱。
- 分別找到并打開 eureka-consumer、eureka-provider 和 eureka-provider2 三個(gè)文件中的 application.properties 文件,將 accessKey 和 secretKey 的值修改為您實(shí)際賬號的值。
- 分別找到并打開 eureka-consumer、eureka-provider 和 eureka-provider2 三個(gè)文件中的 application.properties 文件,將數(shù)據(jù)庫的 url、username和 password 的值修改為您實(shí)際使用的值。
- 運(yùn)行 txc-yun-sample/sample-txc-springcloud 目錄下的 sh build.sh 腳本,編譯工程。
編譯后會(huì)在相應(yīng)文件中生產(chǎn) client 目錄。
- 運(yùn)行樣例。
- 運(yùn)行 eureka-locator/client/bin 目錄下的 locator.sh 腳本,啟動(dòng)注冊中心。
- 運(yùn)行 eureka-provider/client/bin 目錄下的 provider1_run.sh 腳本,啟動(dòng)扣款服務(wù)。
- 運(yùn)行 eureka-provider2/client/bin 目錄下的 provider2_run.sh 腳本,啟動(dòng)存款服務(wù)。
- 運(yùn)行 eureka-consumer/client/bin 目錄下的 consumer_run.sh 腳本,啟動(dòng)樣例。
結(jié)果驗(yàn)證
- 使用瀏覽器訪問地址 http://<ECS IP>:9000。
- 在頁面中輸入轉(zhuǎn)賬金額,然后單擊提交。
- 余額不足,轉(zhuǎn)賬失敗,全局事務(wù)回滾。