Seata官网文档:
Setat术语
TC (Transaction Coordinator) - 事务协调者 相当于二阶段提交中的TM
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器 开启总事务,也就是某个业务的事务
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器:相当于@ Transcation,每个微服务都有一个自己的资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
简述Seata工作流程:以下单业务为例,首先TM会告诉TC要开始一个全局事务了,TC就让他开始,当远程调用到第一个微服务Stock的时候,Stock的RM会在TC注册一个分支,并实时汇报自己事务的状态。其他微服务也是一样。当其中一个微服务事务回滚了,TC就会通知其他微服务也一起回滚,就实现了全局的事务管理。
AT模式(自动事务模式)
- 给各个微服务创建数据库
- 给每个微服务都创建undo_log表,这张表就是回滚日志表
- 安装Seata服务器,从 https://github.com/apache/incubator-seata/releases,下载服务器软件包,将其解压缩。
- 整合
-
- 导入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
-
- 解压并启动seata-server,registry.conf 注册中心配置 registry type=nacos file.conf
- 所有想使用Seata的无服务都使用 Seata的DataSourceProxy代理自己的数据源
@Configuration
public class MySeataConfig {
@Autowired
DataSourceProperties dataSourceProperties;
@Bean
public DataSource dataSource(DataSourceProperties dataSourceProperties) {
//properties.initializeDataSourceBuilder().type(type).build();
HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
if (StringUtils.hasText(dataSourceProperties.getName())) {
dataSource.setPoolName(dataSourceProperties.getName());
}
return new DataSourceProxy(dataSource);
}
}
-
- 每个微服务的resources都导入registry.conf和file.conf ;
- 给分布式大事务的入口加上@GlobalTransactional ,其他小事务加@ Transcation注解