Seata 分布式事务

初探

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

目前的最新seata版本为1.4.

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

 

主要业务有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() 的方式来随机抛出异常,模拟了在服务调用时随机发生异常的场景。

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

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

 

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

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

 

 

 

                                 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值