文中文件资源和项目在结尾都有资源链接
Seata分为三大模块,分别是 TM、RM 和 TC
TC (Transaction Coordinator) - 事务协调者:
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器:
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器:
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
在 Seata 中,分布式事务的执行流程:
- TM 开启分布式事务(TM 向 TC 注册全局事务记录);
- 按业务场景,编排数据库、服务等事务内资源(RM 向 TC 汇报资源准备状态 );
- TM 结束分布式事务,事务一阶段结束(TM 通知 TC 提交/回滚分布式事务);
- TC 汇总事务信息,决定分布式事务是提交还是回滚;
- TC 通知所有 RM 提交/回滚 资源,事务二阶段结束。
TM 和 RM 是作为 Seata 的客户端与业务系统集成在一起,TC 作为 Seata 的服务端独立部署。
服务端存储模式支持三种:
file:单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高(默认)
DB:高可用模式,全局事务会话信息通过DB共享,相对性能差一些
redis:Seata-Server1.3及以上版本支持,性能较高,存在事务信息丢失风险,需要配合实际场景使用
TC环境搭建详解
这里我们使用DB高可用模式,找到 conf/file.conf
文件
修改以上中的信息,找到对应的db配置,修改其中的jdbc连接,要注意其中涉及到三个表( global_table,branch_table,lock_table
),同时 mysql5和mysql8的驱动是不一样的
mysql5:com.mysql.jdbc.Driver mysql8:com.mysql.cj.jdbc.Driver
建表语句地址: seata/mysql.sql at develop · seata/seata · GitHub
global_table:全局事务表,每当有一个全局事务发起后,就会在该表中记录全局事务的ID
branch_table:分支事务表,记录每一个分支事务的 ID,分支事务操作的哪个数据库等信息
lock_table: 全局锁
当上述配置好以后,重启Seata即可生效。
Seata 配置 Nacos
Seata支持注册服务到Nacos,以及支持Seata所有配置放到Nacos配置中心,在Nacos中统一维护;在
高可用模式下就需要配合Nacos来完成
首先找到 conf/registry.conf
,修改 registry
信息
registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "nacos" nacos { application = "seata-server" # 这里的配置要和客户端保持一致 serverAddr = "127.0.0.1:8848" group = "SEATA_GROUP" # 这里的配置要和客户端保持一致 namespace = "" cluster = "default" username = "nacos" password = "nacos" } config { # file、nacos 、apollo、zk、consul、etcd3 type = "nacos" nacos { serverAddr = "127.0.0.1:8848" namespace = "" group = "SEATA_GROUP" username = "nacos" password = "nacos" dataId = "seataServer.properties" } ...... }
修改好后,将seata中的一些配置上传到Nacos中,因为配置项比较多,所以官方提供了一个 config.txt
,只下载并且修改其中某些参数后,上传到Nacos中即可。
下载地址: seata/script/config-center at develop · seata/seata · GitHub
修改项如下:
service.vgroupMapping.mygroup=default # 事务分组 store.mode=db store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai store.db.user=root store.db.password=123456
修改好这个文件以后,把这个文件放到seata目录下
把这些配置都加入到Nacos配置中,要借助一个脚本来进行执行,官方已经提供好。
地址为: seata/nacos-config.sh at develop · seata/seata · GitHub
新建一个 nacos-config.sh
文件,将脚本内容复制进去,修改 congfig.txt
的路径
上述文件修改好后,打开git工具,将 nacos-config.sh
工具拖