Seata
Seata
1 Seata
快速上手
快速上手分为 2 个步骤,服务端部署,客户端实现。
1 服务端部署
依赖环境准备。
- MySQL8
- nacos2.3.1
- 下载 seata 安装包(2.1.0)。
- spring-cloud-starter-alibaba-seata 2023.0.3.3。
部署命令如下。
# 1 数据库执行 seata_init.sql 脚本。
# 2 解压文件
tar -zxvf apache-seata-2.1.0-incubating-bin.tar.gz -C /usr/local/
mv apache-seata-2.1.0-incubating-bin seata
# 3 修改启动配置,配置参考 seata 脚本文件里面的 application.yml。
vim /usr/local/seata/conf/application.yml
# 4 打开 nacos 配置页面,新增文件 seataServer.properties。dataId 为 seataServer.properties,group_id 为 SEATA_GROUP,配置参考 seata 脚本文件里面的 seataServer.properties。
# 源配置内容参考 /script/config-center/config.txt.重点修改下存储类型和 jdbc 配置。
# 5 拷贝 mysql-connector-j-8.0.33.jar 驱动到 /usr/local/seata/lib/jdbc 目录。
cp mysql-connector-j-8.0.33.jar /usr/local/seata/lib/jdbc/
# 6 启动
# window:seata-server.bat -h 127.0.0.1 -p 8091。安装目录是 E:\Program Files\apache-seata-2.1.0-incubating-bin\bin。
cd /usr/local/seata/bin
./seata-server.sh -h 192.168.37.200 -p 8091 > /usr/local/seata/logs/seata-server.log 2>&1 &
# 7 验证浏览器打开 http://192.168.37.200:7091/ ,默认用户/密码是 application.yml 里面配置的 seata/seata。
2 seata 客户端 DEMO
- 新增 seata.properties。dataId 为 seata.properties,group_id 为 SEATA_GROUP,几个 demo 会用里面配置的对应的 seata 分组。
- 新增 sample-seata-business、sample-seata-order、sample-seata-storage。
单个模块注意下要点。
- spring boot 项目引入的是 spring cloud 的 nacos 和 feign 依赖。
- application.yml 配置了 nacos 和 seata 的配置。
- applacation.yml 中的事务组,注意 seata 服务端和客户端都要有这个事务组。
- 使用 seata AT 模式的话,每个应用的表都需要 undo_log 表。
- 注意 http://localhost:4003/business/insertFail,使用 AT 模式,测试发现,直接通过客户端看可以看到未提交的行数据,出现异常后,数据又回滚了,这块需要再了解下原理理解。
3 使用官网的 seata-example
- account-service、order-service、storage-service 配置 DB 配置。
- 对应的库执行 seata_example.sql。
- 创建 seata.properties。dataId 为 seata.properties,group_id 为 DEFAULT_GROUP。注意,服务端的 seataServer.properties 也将以下事务组都添加进去,需要和客户端事务组对应上。
service.vgroupMapping.order-service-tx-group=default
service.vgroupMapping.account-service-tx-group=default
service.vgroupMapping.business-service-tx-group=default
service.vgroupMapping.storage-service-tx-group=default
- 修改好官方错误的配置,再分别启动 account-service、order-service、storage-service 服务。
注意官网的 seata-example 的 application.yml 配置是老版本的配置,启动会失败,需要修正部分内容。
# seata.registry.nacos.application: seata-server
seata.registry.nacos.group: 'SEATA_GROUP'
XA 模式使用
使用步骤如下。
- 修改所有相关的服务配置,即
seata.data-source-proxy-mode=XA
。 - 在每个微服务的业务代码中,加上
@GlobalTransactional
注解。
TIP
- seata 的 TC 可以集群部署,从而避免单点故障。
- seata 的提交过程是异步的,TC 在通知 RM 提交分支事务后,不会等待 RM 的响应。这样可以减少阻塞时间,提高性能。
AT 模式使用
使用步骤如下。
- 应用引入 undo_log 表。
- 修改所有相关的服务配置,即
seata.data-source-proxy-mode=AT
。 - 在每个微服务的业务代码中,加上
@GlobalTransactional
注解。
TCC 模式使用
略,代码侵入性高。
Saga 模式使用
略,代码侵入性高。