ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Seata 分布式事务

2021-01-06 17:33:44  阅读:194  来源: 互联网

标签:事务 库存 seata 修改 报错 用户服务 分布式 数据 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 方法解决。

 

 

 

                                 

 

 

 

 

 

标签:事务,库存,seata,修改,报错,用户服务,分布式,数据,Seata
来源: https://blog.csdn.net/liu1390910/article/details/112279942

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有