分布式事务框架 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部分

推荐阅读