Seata 分布式事务

初探

下载官方代码:https://gitee.com/mirrors/Spring-Cloud-Alibaba.git

目前的最新seata版本为1.4.

Seata 分布式事务

根据MD,分别启动4个服务。

Seata 分布式事务

 

主要业务有3项

  1. 扣除商品库存
  2. 扣除用户金额
  3. 创建订单

demo 中有feign,rest 两种服务掉用方式

http://127.0.0.1:18081/seata/feign

http://127.0.0.1:18081/seata/rest

后台操作修改数据为: 库存 》 用户表 》订单表

当报错的服务为用户服务时,将断点打到  “用户服务”  报错位置:

 OrderService 和 AccountService 中 使用 Random.nextBoolean() 的方式来随机抛出异常,模拟了在服务调用时随机发生异常的场景。

Seata 分布式事务

这时可以看出,库存表的数据,其实已经被修改了,并且 undo_log 表已经插入了库存业务数据标识

Seata 分布式事务

Seata 分布式事务

Seata 分布式事务

当执行完代码后,数据回滚为原始数据,undo_log 缓存数据删除。

 Seata 分布式事务

由于写隔离可得知:就算本地事务提交,库存表已经修改,但是其他事务仍然无法对已修改的数据进行提交性质的修改,因为全局锁一直为当前事务所持有。

Seata 分布式事务

由于读隔离可得知,Seata AT模式默认 读未提交,所以有可能读到脏数据。此问题可以用 for update 方法解决。

 

 

 

                                 

 

 

 

 

 

上一篇:分布式事务管理 Seata


下一篇:seata的搭建与安装