分布式事務框架 Seata 入門案例( 四 )

application.yml
server:port: 8083servlet:context-path: /orderspring:application:name: samples-order-servicedatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/order?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456dubbo:protocol:name: dubboport: 20883registry:address: nacos://127.0.0.1:8848config-center:address: nacos://127.0.0.1:8848metadata-report:address: nacos://127.0.0.1:8848seata:enabled: truetx-service-group: my_test_tx_groupservice:vgroup-mapping:my_test_tx_group: defaultregistry:type: nacosnacos:server-addr: 127.0.0.1:8848cluster: defaultgroup: SEATA_GROUP核心代碼如下

分布式事務框架 Seata 入門案例

文章插圖
依次啟動這四個項目,Postman訪問一下
分布式事務框架 Seata 入門案例

文章插圖
通過斷點,觀察 global_table、lock_table、branch_table 等表數據的變化
剛開始,所有表中數據都是空的
執行到事務方法之后,global_table表中有了一條數據
分布式事務框架 Seata 入門案例

文章插圖
當調用第一個遠程接口扣減庫存后,lock_table和branch_table表中都有了一條數據
分布式事務框架 Seata 入門案例

文章插圖

分布式事務框架 Seata 入門案例

文章插圖
同時,stock庫中undo_log表中也新增了一條數據
分布式事務框架 Seata 入門案例

文章插圖

分布式事務框架 Seata 入門案例

文章插圖
繼續往下執行,當調用第二個遠程接口創建訂單后,branch_table和lock_table中都新增了2條數據
分布式事務框架 Seata 入門案例

文章插圖

分布式事務框架 Seata 入門案例

文章插圖
account庫和order庫中的undo_log也有了數據
分布式事務框架 Seata 入門案例

文章插圖
當事務方法執行完后,事務提交,上述表中此次事務相關數據清空
我們通過Seata Server的日志可以更清晰的看到事務從創建到提交的整個過程
分布式事務框架 Seata 入門案例

文章插圖
正式正常事務成功的情況,有時候由于業務報錯了 , 或者事務超時了,或者其它的情況 , 事務會回滾
分布式事務框架 Seata 入門案例

文章插圖
4.  配置中心
在此之前,示例中沒有使用配置中心,而是采用本地配置文件的方式 。但實際開發過程中 , 建議還是采用配置中心,下面以nacos作為配置中心演示 。
細心的同學會發現,微服務架構中有配置中心和注冊中心,Dubbo中也有配置中心和注冊中心,而本文講的Seata也有配置中心和注冊中心 。那么它們有什么區別嗎?其實,并沒有區別,各是各的 。微服務的配置中心和注冊中心你要配置,Dubbo的你也要配置,Seata的配置中心和注冊中心你還要配置,盡管它們可能是同一個實例 , 但那也得各配各的 。
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.1</version></dependency>有兩種配置方式
方式一:放在某個命名空間下,每一個配置項作為一行,即每一行一個DataId
https://github.com/seata/seata/tree/master/script/config-center
分布式事務框架 Seata 入門案例

文章插圖
在scripts/config-center目錄下有個config.txt,這個config.txt文件中為我們準備好了各種配置項,我們按需修改里面的內容即可,然后可以通過腳本將config.txt中的內容導入nacos , 當然也可以一條一條手動在nacos中創建
例如:
sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password注意:-g 指定Group??-t 指定命名空間
示例中上傳到默認命名空間下了
分布式事務框架 Seata 入門案例

文章插圖

分布式事務框架 Seata 入門案例

文章插圖
注意,config.txt中包含了Server端和Client端的配置,里面注釋寫的也比較清楚哪些是Server端需要的配置,哪些是Client端的配置
導入配置以后,現在修改Server端的配置,seata-->conf-->application.yml中seata.config部分

推薦閱讀