简介
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
我们项目中使用AT模式,AT模式分为两个阶段:
一阶段:
业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:
提交异步化,非常快速地完成。
回滚通过一阶段的回滚日志进行反向补偿。
- 开启seata事务的工程中引入相关依赖
pom.xml中引入seata的jar包,1.4.2之前的版本,都不支持一个data id的方式存放所有的seata服务器配置信息,从1.4.2后支持一个配置文件的方式,所以此处排除默认引入的1.3的包,需引入1.4.2。
1 | java复制代码<dependency> |
关于spring cloud alibaba生态的版本参考地址:github.com/alibaba/spr…
- seata server服务器搭建
服务器下载地址:github.com/seata/seata…,对下载的工程进行解压、配置。
配置的模板文件下载地址:github.com/seata/seata…
(1)seata/conf/file.conf
此配置项为seata 服务器的存储配置,存储方式选择db,再配置数据库的连接信息,以及处理事务的全局性表(表名使用默认的就可以)。
1 | java复制代码store { |
注意点:
driverClassName驱动的配置需要根据mysql的版本决定:
mysql5.+使用 driverClassName = “com.mysql.jdbc.Driver”
mysql8使用 driverClassName = “com.mysql.cj.jdbc.Driver”
(2)seata/conf/registry.conf
需要配置选用的注册中心类型(nacos),注册中心的连接信息;配置中心的类型,配置中心的连接信息。
1 | java复制代码registry { |
注意点:
①当nacos开启安全配置(在nacos的conf/application.properties中配置nacos.core.auth.enabled=true)后,对nacos的连接信息都要带上用户名、密码等信息
②在seata1.4.2后才可以使用dataId = “seataServer.properties”的方式读取配置信息
(3)script/config-center/config.txt:
此配置信息是seata事务的相关属性,在nacos中创建data id 时,粘贴到文本值的内容,即seataServer.properties的配置项,seata使用1.4.2版本,新建的data id文件类型选择properties。若是使用seata1.4.2之前的版本,以下的每个配置项在nacos中就是一个条目,需要使用script/config-center/nacos/下的nacos-config.sh(linux或者windows下装git)或者nacos-config.py(python脚本)执行上传注册,可以参考blog.csdn.net/ZHANGLIZENG…
1 | bash复制代码transport.type=TCP |
注意点
①.service.vgroupMapping.my_test_tx_group=default
中的my_test_tx_group需要与bootstrap.yml中配置的seata.tx-service-group的值一致。
②.service.vgroupMapping.my_test_tx_group=default
配置的default必须要等于registry.conf中配置的cluster=”default”。
③.store.mode=db配置为db的方式,则需要配置db数据库方式的连接信息
store.db.url、store.db.user、store.db.password,此数据库存储下存放的表
global_table、branch_table、lock_table,用于记录全局性的事务信息
④.store.db.driverClassName的配置
mysql5.+使用 driverClassName = “com.mysql.jdbc.Driver”
mysql8使用 driverClassName = “com.mysql.cj.jdbc.Driver”
⑤.service.default.grouplist=ip:port为访问seata服务器的地址和端口(仅注册中心为file时使用),8091是默认端口,
也可以修改启动端口,在启动项目时加上端口:
seata-server.bat -p 18091
sh seata-server.sh -p 18091
⑥seata server需要配置集群时,只需要在启动seata server服务时指定不同的端口和节点序号即可,配置file.conf和registry.conf的内容一致,
windows下启动:
seata-server.bat -p 18091 -n 1
seata-server.bat -p 8091 -n 2
linux下启动:
sh seata-server.sh -p 18091 -n 1
sh seata-server.sh -p 8091 -n 2
⑦客户端启动时,可以看是否成功注册到seata server服务器
3.创建需要的事务表
global_table:全局事务表
branch_table:分支信息表
lock_table:加锁的表
以上三个表需要创建在seata服务器操作的db上,即file.conf中配置的数据库。
1 | mysql复制代码--全局事务表-- |
undo_log:回滚日志表
在每个需要开启seata事务操作的数据库下都需要建立此表。
1 | mysql复制代码--日志文件表-- |
注意点:
seata1.4.2之后,需要回滚的表日期类型不能使用datetime,可以使用timestamp
4.客户端配置
需要开启seata事务的客户端,需要配置seata的注册和配置中心,使用相关注解进行事务开启。
(1)bootstrap.yml
向项目中添加配置信息,配置项的值与seata服务器的registry.conf中一致。
1 | java复制代码seata: |
(2)spring boot 启动程序添加数据自动代理
使用注解:@EnableAutoDataSourceProxy
例子:
1 | java复制代码@EnableAutoDataSourceProxy |
(3)使用注解开启事务
1 | java复制代码@ApiOperation("添加测试数据") |
本文转载自: 掘金