前言
分布式事务说明:
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。例如在大型电商系统中,下单接口通常会扣减库存、减去优惠、生成订单 id, 而订单服务与库存、优惠、订单 id 都是不同的服务,下单接口的成功与否,不仅取决于本地的 db 操作,而且依赖第三方系统的结果,这时候分布式事务就保证这些操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
一、Seata是什么?
Seata说明:Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
Seata模式:Seata支持四种模式:AT,TCC,XA,SAGA
Seata运行:执行图解
二、使用步骤
1.Server端部署
说明:Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。
- 启动包下载:Server下载
- 建表:Server端建表语句
- 修改store.mode
启动包: seata–>conf–>file.conf,修改store.mode=“db或者redis” - 修改数据库连接|redis属性配置
启动包: seata–>conf–>file.conf,修改store.db或store.redis相关属性。 - 启动: seata-server.sh -h 127.0.0.1 -p 8091 -m db
2.业务系统集成Client
- 添加seata依赖
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>最新版</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
- undo_log建表、配置参数:配置参数说明
- 代理数据源:
@Primary
@Bean("dataSource")
public DataSourceProxy dataSource(DataSource druidDataSource) {
//AT 代理 二选一
return new DataSourceProxy(druidDataSource);
//XA 代理
return new DataSourceProxyXA(druidDataSource)
}
- 业务使用:
@GlobalTransactional
public void purchase(String userId, String commodityCode, int orderCount) {
......
}
总结
参考:seata官网