http://seata.io/zh-cn/docs/user/quickstart.html
Seata 是阿里巴巴开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案
Seata术语
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚
一,安装Seata-Server
1.从GitHub - seata/seata: Seata is an easy-to-use, high-performance, open source distributed transaction solution.现在release版本的seata zip包,目前是1.4.2版本
2.配置conf目录下的conf文件(这里我选择注册到Nacos,持久化到MySQL DB,Seata-Server需要的数据库表结构见官网或github)
3.启动Seata-Server (默认端口为8091)
二,构建3个SpringCloud微服务项目,分别对应 订单系统、账户系统、库存系统
用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:
仓储服务:对给定的商品扣除仓储数量。
订单服务:根据采购需求创建订单。
帐户服务:从用户帐户中扣除余额。
一个完整的下单流程是: 初始化订单->减库存->减账户余额->修改订单状态为已完成
而实际业务场景中可能存在一些异常场景,造成分布式事务回滚,如:
执行下单--用户1产品2买3个 (产品2不存在 造成 自动回退 订单表+库存表)
用户1002产品1买3个 (用户1002不存在 造成 自动回退 订单表+库存表+用户表)
1.建立3个数据库
2.账户数据库和表结构设计
3.订单数据库和表结构设计
4.库存数据库和表结构设计
5.订单系统、账户系统、库存系统 项目结构
6.下单的逻辑代码
核心代码:Seata提供的全局事务注解
@GlobalTransactional(name = "fsp-create-order", rollbackFor = Exception.class)
7.测试下单