在上一节我们使用了Docker版本的Seata,但考虑到配置的复杂性,本节将转向使用本地部署的方式,这样配置文件的管理会更直观。请确保已经停止之前运行的Docker容器。
一、下载Seata 2.0.0版本
为了稳定起见,我们选择2.0.0版本进行实践,虽然后续有更新的Apache孵化版本。访问官方GitHub仓库下载:
https://github.com/apache/incubator-seata/releases
在Releases页面中找到 v2.0.0 版本。

在Assets中,选择 seata-server-2.0.0.zip 或 seata-server-2.0.0.tar.gz 进行下载。

二、解压下载的文件
下载完成后,解压到本地目录。解压后的目录结构大致如下:

三、修改Seata服务器配置
核心配置位于 conf 目录下的 application.yml 文件。为了避免误操作,建议先备份原文件。
原配置内容截图如下:

我们需要将其配置中心和注册中心都指向Nacos。修改后的关键配置部分如下:

具体的YAML配置内容如下:
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
data-id: seataServer.yml
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
data-id: seataServer.yml
# support: file, db, redis, raft
mode: file
这里为了简化,事务日志存储模式(store.mode)依然使用了文件模式。如果你希望使用数据库模式,需要额外创建数据库表,本文暂不展开。
四、在Nacos中创建配置
为了让Seata服务器能够从Nacos读取配置,我们需要先在Nacos控制台创建对应的配置。
登录Nacos控制台(默认地址 http://127.0.0.1:8848/nacos),在“配置管理”->“配置列表”中,点击“+”创建配置。
- Data ID:
seataServer.yml
- Group:
SEATA_GROUP
- 配置格式:
YAML
在配置内容区域,填入以下精简配置:

service:
vgroupMapping:
default_tx_group: default
default:
grouplist: 127.0.0.1:8091
disableGlobalTransaction: false
这个配置定义了事务组映射,是微服务客户端与Seata服务器建立连接的关键。
五、启动Seata服务器
确保你的Nacos服务已经启动。然后,进入Seata解压目录的 bin 文件夹下。
- Mac/Linux:
sh seata-server.sh
- Windows:
双击运行 seata-server.bat
启动成功后,你可以访问Seata的控制台(默认端口 http://localhost:7091),使用默认用户名 seata 和密码 seata 登录。

同时,在Nacos的“服务管理”->“服务列表”中,应该能看到 seata-server 服务已经成功注册。

六、配置业务微服务
业务服务的依赖已在上一节配置好,无需改动。现在需要修改使用分布式事务的微服务(如Consumer和Provider)的 application.yml 配置文件。
Consumer服务配置示例 (application.yml):
seata:
enabled: true
application-id: ${spring.application.name}
tx-service-group: default_tx_group
registry:
type: nacos
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
group: SEATA_GROUP
config:
type: nacos
nacos:
server-addr: ${spring.cloud.nacos.config.server-addr}
group: SEATA_GROUP
data-id: seataServer.yml
Provider服务配置示例 (application.yml):
seata:
enabled: true
application-id: ${spring.application.name}
tx-service-group: default_tx_group
registry:
type: nacos
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
group: SEATA_GROUP
config:
type: nacos
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
group: SEATA_GROUP
data-id: seataServer.yml
七、集成效果验证
我们通过一个简单的库存扣减和订单创建场景来验证分布式事务是否生效。
初始数据:
- 商品
C003 库存为 9。

- 订单表中有1条记录。

启动所有微服务(ConsumerApp, ProviderApp, GatewayApp)。

1. 正常情况测试
访问创建订单接口(参数 count=1):
http://localhost:8003/consumer/consumer/create?userId=u1&commodity=C003&count=1
接口返回 ok。

验证结果:
- 订单表新增1条记录(总数变为2)。

- 商品库存扣减1(变为8)。

事务提交成功,数据一致性得到保证。
2. 异常情况测试
模拟业务异常,访问接口(参数 count=-2,假设服务端代码对负数进行了校验并抛出异常):
http://localhost:8003/consumer/consumer/create?userId=u1&commodity=C003&count=-2
接口返回500错误。

验证结果:
- 订单表记录数没有增加(仍为2条)。

- 商品库存没有变化(仍为8)。

由于业务逻辑异常,Seata 介入并回滚了分布式事务,有效防止了数据不一致的情况。这证明了在 SpringCloud Alibaba 微服务架构中,通过集成 Seata 和 Nacos,分布式事务已经正确配置并生效。
通过以上步骤,我们完成了 Seata 与 Nacos 的本地化集成与验证。这种部署方式更便于开发者理解和调试配置,是学习 Java 微服务架构中分布式事务处理的常见实践。如果你想了解更多关于云原生和微服务架构的深度讨论,欢迎到 云栈社区 与更多开发者交流。