seata-client.yaml
seata-client.yaml 用于配置 Seata 2.0.0 分布式事务客户端,让业务微服务找到 Seata Server,完成跨服务事务的提交和回滚。
一、需要修改的配置
部署时主要核对 Nacos 注册信息和事务组映射。重试、锁、回滚日志及线程参数通常保留交付值,无需逐项调整。
| 配置位置 | 需要填写或核对的内容 |
|---|---|
seata.registry.nacos.server-addr | Seata Server 注册使用的实际 Nacos 地址,例如 192.168.1.10:8848 |
seata.registry.nacos.username、password | 访问该 Nacos 环境的实际账号和密码 |
seata.registry.nacos.namespace | 与 Seata Server 所在 Namespace 一致;public 使用空字符串,自定义环境填写 Namespace ID |
seata.registry.nacos.group | 与 Seata Server 注册的 Group 一致;沿用交付配置时为 SEATA_GROUP |
seata.registry.nacos.application | 与 Nacos 中 Seata Server 的注册服务名一致;沿用交付配置时为 seata-server |
seata.tx-service-group | 业务事务组名称;沿用交付配置时保留 shop-group |
seata.service.vgroup-mapping.shop-group | 键名与上方事务组一致,值与 Seata Server 的 TC 集群名称一致;沿用交付配置时为 default |
如果事务组从 shop-group 改为其他名称,vgroup-mapping 下的键也要同步修改。Nacos Group、业务事务组和 TC 集群名称是不同配置,不要混用。
application-id 保留应用名称占位符,由各服务自动生成;AT 模式还需确认参与事务的业务库已初始化 undo_log 表。此文件配置的是业务客户端,不能代替 Seata Server 自身的注册和存储配置。
二、配置示例
seata:
enabled: true
application-id: ${spring.application.name}-seata
tx-service-group: shop-group
enable-auto-data-source-proxy: true
client:
rm:
report-success-enable: true
table-meta-check-enable: false
report-retry-count: 5
async-commit-buffer-limit: 10000
lock:
retry-interval: 10
retry-times: 30
retry-policy-branch-rollback-on-conflict: true
tm:
commit-retry-count: 3
rollback-retry-count: 3
undo:
data-validation: true
log-serialization: jackson
log-table: undo_log
log:
exception-rate: 100
service:
vgroup-mapping:
shop-group: default
enable-degrade: false
disable-global-transaction: false
transport:
shutdown:
wait: 3
thread-factory:
boss-thread-prefix: NettyBoss
worker-thread-prefix: NettyServerNIOWorker
server-executor-thread-prefix: NettyServerBizHandler
share-boss-worker: false
client-selector-thread-prefix: NettyClientSelector
client-selector-thread-size: 1
client-worker-thread-prefix: NettyClientWorkerThread
type: TCP
server: NIO
heartbeat: true
serialization: seata
compressor: none
enable-client-batch-send-request: true
registry:
type: nacos
nacos:
application: seata-server
server-addr: shoptnt-nacos:8848
group: SEATA_GROUP
namespace: ""
username: "Nacos用户名"
password: "Nacos密码"
shoptnt-nacos:8848 是容器网络内的地址示例。使用源码部署或跨服务器部署时,应替换为业务服务能够访问的实际 Nacos 地址,并填写实际账号和密码。
三、启用事务与应用标识
| 配置项 | 示例值 | 说明 |
|---|---|---|
enabled | true | 启用 Seata 客户端自动配置 |
application-id | ${spring.application.name}-seata | 客户端应用标识,例如商品服务为 goods-service-seata |
tx-service-group | shop-group | 业务事务组名称,用于查找该组对应的 TC 集群 |
enable-auto-data-source-proxy | true | 启用 Seata 数据源自动代理;AT 模式需要业务 SQL 通过相应的数据源代理执行 |
启用客户端并不等于所有业务操作都会自动成为全局事务,实际事务范围还取决于程序中的事务入口和调用链路。
四、事务组与 TC 集群映射
seata:
tx-service-group: shop-group
service:
vgroup-mapping:
shop-group: default
这段配置表示:业务服务使用事务组 shop-group,该事务组映射到名为 default 的 TC 集群。
| 配置位置 | 对应关系 |
|---|---|
tx-service-group 的值 | 必须与 vgroup-mapping 下的键一致,本例均为 shop-group |
vgroup-mapping.shop-group 的值 | 必须与 Seata Server 注册到 Nacos 时使用的集群名称一致,本例为 default |
registry.nacos.application | 必须与 Seata Server 在 Nacos 中注册的服务名一致,本例为 seata-server |
各应用可以共用同一个事务组,也可以使用不同事务组。使用不同名称时,需要为每个事务组配置对应映射;不能只修改 tx-service-group 而保留原映射键。
事务组、TC 集群和 Nacos Group 是三个不同概念:
shop-group:业务事务组。default:事务组映射的 TC 集群名称。SEATA_GROUP:Seata Server 在 Nacos 中注册服务使用的 Group。
映射查找过程可参考 Seata 事务分组说明。
服务开关
| 配置项 | 示例值 | 说明 |
|---|---|---|
service.enable-degrade | false | 保留当前交付配置;不要将其等同于 Sentinel 的熔断降级规则 |
service.disable-global-transaction | false | 不禁用全局事务;设置为 true 表示禁用全局事务 |
五、通过 Nacos 查找 Seata Server
seata:
registry:
type: nacos
nacos:
application: seata-server
server-addr: shoptnt-nacos:8848
group: SEATA_GROUP
namespace: ""
username: "Nacos用户名"
password: "Nacos密码"
| 配置项 | 说明 | 修改要求 |
|---|---|---|
type | Seata 注册中心类型 | 当前使用 nacos |
application | TC 在 Nacos 中注册的服务名 | 与 Seata Server 实际注册名称一致 |
server-addr | Nacos 地址 | 替换为实际主机与端口 |
group | TC 注册服务所属的 Group | 与 Seata Server 注册信息一致,本例为 SEATA_GROUP |
namespace | TC 注册服务所属的 Namespace ID | 空字符串表示 public;自定义环境填写实际 Namespace ID,不是显示名称 |
username、password | 访问 Nacos 的账号和密码 | 使用有权读取对应服务信息的实际账号 |
此处是 Seata 查找 TC 使用的注册信息,不会因为 common.yaml 中配置过 Nacos 就自动省略。客户端与 Seata Server 的注册中心地址、Namespace、Group、服务名和集群名称应相互对应。
通过 Nacos 找到实例后,业务服务还需要能够访问 TC 的实际事务通信地址。Nacos 的 8848 端口不是 TC 的事务通信端口,网络检查时应同时确认 TC 实例返回的地址与端口可达。
六、RM 与全局锁
RM(资源管理器)负责管理业务数据库等事务资源,以及分支事务的注册、提交和回滚。
分支事务与元数据
以下参数位于 seata.client.rm 下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
report-success-enable | true | 是否向 TC 上报一阶段分支事务执行成功的状态 |
table-meta-check-enable | false | 表结构元数据检查开关,按交付配置设置;数据库表结构变更后应检查缓存元数据是否已更新 |
report-retry-count | 5 | 分支事务一阶段结果向 TC 上报失败时的重试次数 |
async-commit-buffer-limit | 10000 | 异步提交缓冲队列容量,影响 AT 模式二阶段异步提交清理任务的积压能力 |
全局锁重试
以下参数位于 seata.client.rm.lock 下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
retry-interval | 10 | 校验或获取全局锁时的重试间隔,单位毫秒 |
retry-times | 30 | 校验或获取全局锁时的重试次数 |
retry-policy-branch-rollback-on-conflict | true | 与其他全局回滚事务发生锁冲突时,优先释放本地锁,使对方回滚有机会完成 |
这些参数控制锁冲突时的等待与重试,不是业务请求的整体超时时间,也不会自动解决长期持锁或高并发热点带来的冲突。
七、TM 提交与回滚重试
TM(事务管理器)负责发起全局事务,并请求 TC 执行全局提交或回滚。
以下参数位于 seata.client.tm 下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
commit-retry-count | 3 | 向 TC 发起全局提交请求失败时的重试次数 |
rollback-retry-count | 3 | 向 TC 发起全局回滚请求失败时的重试次数 |
这里的重试不是重新执行整笔业务,也不代表可以无限重试业务接口。重试次数应结合事务超时和实际网络情况调整。
八、回滚日志与异常日志
Undo Log
以下参数位于 seata.client.undo 下,主要用于 AT 模式:
| 配置项 | 示例值 | 说明 |
|---|---|---|
data-validation | true | 二阶段回滚时进行数据镜像校验,检查是否存在与预期不一致的数据变化 |
log-serialization | jackson | Undo Log 数据的序列化方式 |
log-table | undo_log | 业务数据库中用于保存回滚日志的表名 |
参与 AT 分支事务的业务数据库需要包含与当前 Seata 版本匹配的 undo_log 表。仅填写表名不会自动建表,部署前应检查初始化脚本是否已执行。
业务库里的 undo_log 与 TC 自身的事务存储表用途不同,不能只初始化 Seata Server 的数据库就认为业务库已具备回滚条件。
异常堆栈采样
seata:
log:
exception-rate: 100
该参数用于 Seata 特定异常堆栈的采样输出。按当前 2.0.0 实现,100 对应约 1/100 的堆栈输出概率,不表示 100%,也不是所有应用日志的统一输出开关。
九、通信与线程参数
通信协议
以下参数位于 seata.transport 下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
type | TCP | 客户端与 TC 的通信类型 |
server | NIO | 网络通信实现类型 |
heartbeat | true | 启用心跳检测 |
serialization | seata | 通信消息序列化方式,应与服务端兼容 |
compressor | none | 不启用消息压缩 |
enable-client-batch-send-request | true | 启用客户端请求批量合并发送配置 |
shutdown.wait | 3 | 通信模块关闭时的等待时间,单位秒 |
线程工厂
以下参数位于 seata.transport.thread-factory 下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
boss-thread-prefix | NettyBoss | Boss 线程名称前缀 |
worker-thread-prefix | NettyServerNIOWorker | 服务端 NIO Worker 线程名称前缀 |
server-executor-thread-prefix | NettyServerBizHandler | 服务端业务处理线程名称前缀 |
share-boss-worker | false | 不共享 Boss 和 Worker 线程资源 |
client-selector-thread-prefix | NettyClientSelector | 客户端 Selector 线程名称前缀 |
client-selector-thread-size | 1 | 客户端 Selector 线程数量 |
client-worker-thread-prefix | NettyClientWorkerThread | 客户端 Worker 线程名称前缀 |
线程前缀主要用于识别日志和线程信息。服务端相关参数在客户端配置中保留,不代表需要启动额外的 Seata Server。常规部署可沿用交付值,无需因修改数据库地址而一并调整。
十、发布与验证
- 在当前业务环境对应的 Nacos Namespace、Group 中修改并发布
seata-client.yaml,确认需要使用事务的服务加载了该配置。 - 在 Nacos 服务列表中确认
seata-server已注册,核对其 Namespace、Group、集群名称及实际通信地址。 - 确认
tx-service-group与映射键一致,映射值与 TC 集群名称一致。 - 检查需要参与 AT 事务的业务库中是否已创建正确的
undo_log表,并确认数据源代理正常工作。 - 调整注册信息、事务组或数据源代理配置后,重启受影响的业务服务,检查是否存在 TC 查找失败、连接失败、分支注册失败等日志。
- 在测试环境验证跨服务业务的正常提交与异常回滚,确认相关业务数据符合预期;服务能启动、能注册到 Nacos 不等于分布式事务已验证通过。