Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。
- Seata提供了AT、TCC、SAGA和XA事务模式。
其内部有关于分布式事务的定义如下:
分布式事务是由多个分支事务组成的全局事务,其中每个分支事务都是本地事务的形式。
Seata框架包含三部分内容:
事务协调器(Transaction Coordinator,TC):
- 维护全局事务和分支事务的状态,进行全局事务提交或全局事务回滚。
事务管理器(Transaction Manager,TM):
- 定义全局事务,开启全局事务、提交全局事务或回滚全局事务。
资源管理器(Resource Manager,RM):
- 管理分支事务中的资源,向事务管理器注册分支事务和并报告分支事务的状态,负责分支事务提交或回滚。
一个典型的Seata分布式事务的流程如下:
TM向TC发出开启全局事务请求,TC生成全局事务的唯一标识XID,设此处的全局事务为T1。
在全局事务T1的各个流程中,XID会作为事务的标识在微服务之间流转。
RM向TC注册本地事务,注册的本地事务的会作为全局事务T1的分支事务。
TM可以请求TC控制全局事务T1提交或全局事务T1回滚。
TC可以请求全局事务T1下的所有分支事务提交或回滚。
引入Seata:
在分布式事务最外层的方法上添加分布式事务注解
@GlobalTransactional
添加注解之后,在执行业务逻辑之前,Seata会先生成全局事务ID,并且在调用其它服务时,会在请求中携带全局事务ID。
如果其它微服务也添加了Seata依赖,这些微服务会获取全局事务ID,并且参与到全局事务中。
@GlobalTransactional
public void purchase(String userId, String commodityCode, int orderCount) {
// ......
}