seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式务服务.
seate将为用户提供了AT,TCC,SAGA和XA 事务模式.
Seata AT事务方案
seata 的AT模式是一种无侵入的分布式事务解决方案
当用户下订单时,执行以下三步流程:
订单系统保存订单
订单系统调用库存服务,减少商品库存
订单系统调用账户服务,扣减用户金额
这三步要作为一个整体事务进行管理,要么整体成功,要么整体失败。
Seata AT基本原理
Seata AT 事务分两个阶段来管理全局事务:
第一阶段: 执行各分支事务
第二阶段: 控制全局事务最终提交或回滚
seata AT是通过 通过事务协调:
1,执行分布式事务
2.控制全局事务,最终提交或回滚
3.对每个全局事务分配一个事务id
4.RM(资源)上报状态,上报给TC
5.TC要收集每个模块的状态
6.访问库存RM 要先向TC注册
总结:确定有的订单模块都执行成功了,TC才会执行第二阶段回滚或提交,或执行失败了TC会向所有RM发送回滚操作指令,RM会完成最终回滚操作
TC通对数据库的undo_log事务日志表,里面有操作前,操作后的两个数据在这里面,若分布事务下单个模块有一个执行失败,那么TC会通过undo_log事务日志表,回滚到操作前的数据,然后删除事务日志表,这步也叫第二阶段提交.
TC事务协调器,确定所有订单模块都执行成功了,TC才会执行第二阶段回滚或提交.若失败了TC会完成最终回滚操作
seata AT 事务
1.启动TC事务协调器
2.修改三个配置文件
registrg.conf /bin目录下
file.conf /bin 目录下 这个是seata server运行过程中产生的日志数据存储到哪儿
seata-server.bat 这个如查是苹果电脑就用seata-server.bat
在seata文件夹里的bin文件里输入:cmd 打开小黑窗口
运行必:
设置JAVA_HOME PATH
JDK必须是1.8
在eureka网页里有seata-server就表示成功了
然后就是在idae中的哪个类先执行,就在哪个类里的业务方法添加事务注解:@Transactional //控制本地事务.同时加上GlobalTransactional启动全局事务.比如我们现在有一个模块,一个订单,一个用户,一个扣减金额.那个肯定是有了订单,订单分别调动用户和账户所以在订单模块里加
file.conf文件
registry {
# file 、nacos 、eure