4.3 KiB
Seata分布式事务集成参考.md# Seata 分布式事务集成参考
一、架构说明
多环境 Seata 配置管理
所有环境的 Seata 配置统一通过 Nacos 管理,本地配置文件不包含 Seata 配置。
├── dev 环境: base-server-dev.yaml (dev_tx_group, namespace: dev)
├── test 环境: base-server-test.yaml (test_tx_group, namespace: test)
└── prod 环境: base-server-prod.yaml (prod_tx_group, namespace: prod)
Seata Server: 172.16.46.63:30088
为什么使用 IP 直连?
Nacos 的 namespace 隔离机制导致不同命名空间的应用无法跨 namespace 发现服务。Seata Server 通过 IP 直连(registry.type=file)避免此限制,所有环境共享同一个 Seata Server,通过不同的 tx-service-group 实现逻辑隔离。
二、Nacos 配置
在对应环境的 Nacos 配置中心创建配置文件。以 base-server-dev.yaml 为例(其他环境只需修改 tx-service-group):
seata:
enabled: true
application-id: base-server
tx-service-group: dev_tx_group
enable-auto-data-source-proxy: true
data-source-proxy-mode: AT
registry:
type: file
config:
type: file
service:
vgroupMapping:
default_tx_group: default
dev_tx_group: default
test_tx_group: default
prod_tx_group: default
default:
grouplist: 172.16.46.63:30088
client:
tm:
defaultGlobalTransactionTimeout: 60000
undo:
logTable: undo_log
dataValidation: true
logSerialization: jackson
三、业务集成步骤
步骤 1:在 pom.xml 中添加依赖
Seata 2.4.0 版本已在 zt-dependencies 中统一管理。业务模块只需在 pom.xml 中添加:
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</dependency>
版本号会从 zt-dependencies 继承。
步骤 2:创建 undo_log 表
在业务数据库执行:
CREATE TABLE "UNDO_LOG" (
"BRANCH_ID" BIGINT NOT NULL,
"XID" VARCHAR(128) NOT NULL,
"CONTEXT" VARCHAR(128) NOT NULL,
"ROLLBACK_INFO" BLOB NOT NULL,
"LOG_STATUS" INT NOT NULL,
"LOG_CREATED" DATETIME DEFAULT SYSDATE,
"LOG_MODIFIED" DATETIME DEFAULT SYSDATE,
PRIMARY KEY ("BRANCH_ID")
);
CREATE UNIQUE INDEX "UX_UNDO_LOG" ON "UNDO_LOG" ("XID", "BRANCH_ID");
步骤 3:在 Service 方法上添加 @GlobalTransactional 注解
import io.seata.spring.annotation.GlobalTransactional;
@Service
public class OrderServiceImpl implements OrderService {
@GlobalTransactional(name = "create-order", rollbackFor = Exception.class)
@Override
public Long createOrder(OrderCreateReqVO req) {
// 本地操作
orderMapper.insert(order);
// 跨服务调用自动参与分布式事务
inventoryApi.deduct(productId, quantity);
return order.getId();
}
}
说明:
- 只在事务发起方添加注解
- 被调用的其他服务自动参与,无需额外配置
- Seata 自动通过 HTTP Header 传递事务 ID
四、配置汇总
| 配置项 | 开发环境 | 测试环境 | 生产环境 |
|---|---|---|---|
| tx-service-group | dev_tx_group |
test_tx_group |
prod_tx_group |
| Nacos 命名空间 | hwc |
test |
prod |
| Seata Server | 172.16.46.63:30088 |
172.16.46.63:30088 |
172.16.46.63:30088 |
五、其他事务模式
当前配置默认使用 AT 模式(自动事务模式)。Seata 还支持其他事务模式,需要业务自己实现:
TCC 模式
需要实现 Try、Confirm、Cancel 三个业务方法,使用 @TwoPhaseBusinessAction 注解标记。详见官方文档。
Saga 模式
需要定义 Saga 流程和状态机。详见官方文档。
XA 模式
需要数据库支持 XA 事务,配置中修改 data-source-proxy-mode: XA。
详见: https://seata.apache.org/zh-cn/docs/overview/what-is-seata
六、Seata 控制台
地址: http://172.16.46.63:30087
可查看全局事务、分支事务、全局锁等监控信息。
官方文档: https://seata.apache.org/zh-cn/docs/overview/what-is-seata