找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1005

积分

0

好友

127

主题
发表于 昨天 05:15 | 查看: 1| 回复: 0

在上一节我们使用了Docker版本的Seata,但考虑到配置的复杂性,本节将转向使用本地部署的方式,这样配置文件的管理会更直观。请确保已经停止之前运行的Docker容器。

一、下载Seata 2.0.0版本

为了稳定起见,我们选择2.0.0版本进行实践,虽然后续有更新的Apache孵化版本。访问官方GitHub仓库下载:

https://github.com/apache/incubator-seata/releases

在Releases页面中找到 v2.0.0 版本。

Seata 2.0.0版本发布页面

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

Seata 2.0.0版本资源文件列表

二、解压下载的文件

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

Seata解压后的目录结构

三、修改Seata服务器配置

核心配置位于 conf 目录下的 application.yml 文件。为了避免误操作,建议先备份原文件。

原配置内容截图如下:

Seata application.yml 原始配置

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

修改后指向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

在配置内容区域,填入以下精简配置:

在Nacos控制台创建Seata配置

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 登录。

Seata服务控制台登录页面

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

Nacos服务列表显示已注册的Seata服务

六、配置业务微服务

业务服务的依赖已在上一节配置好,无需改动。现在需要修改使用分布式事务的微服务(如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)。
IDEA中启动的三个微服务应用

1. 正常情况测试
访问创建订单接口(参数 count=1):

http://localhost:8003/consumer/consumer/create?userId=u1&commodity=C003&count=1

接口返回 ok
正常调用接口返回ok

验证结果:

  • 订单表新增1条记录(总数变为2)。
    正常情况下的订单表数据
  • 商品库存扣减1(变为8)。
    正常情况下的库存表数据

事务提交成功,数据一致性得到保证。

2. 异常情况测试
模拟业务异常,访问接口(参数 count=-2,假设服务端代码对负数进行了校验并抛出异常):

http://localhost:8003/consumer/consumer/create?userId=u1&commodity=C003&count=-2

接口返回500错误。
异常调用返回500错误页面

验证结果:

  • 订单表记录数没有增加(仍为2条)。
    异常情况下的订单表数据
  • 商品库存没有变化(仍为8)。
    异常情况下的库存表数据

由于业务逻辑异常,Seata 介入并回滚了分布式事务,有效防止了数据不一致的情况。这证明了在 SpringCloud Alibaba 微服务架构中,通过集成 Seata 和 Nacos,分布式事务已经正确配置并生效。

通过以上步骤,我们完成了 Seata 与 Nacos 的本地化集成与验证。这种部署方式更便于开发者理解和调试配置,是学习 Java 微服务架构中分布式事务处理的常见实践。如果你想了解更多关于云原生和微服务架构的深度讨论,欢迎到 云栈社区 与更多开发者交流。




上一篇:深入Linux内核:sysfs文件系统源码剖析与实战开发指南
下一篇:Hyperdiv:用纯Python快速构建交互式Web UI的工具指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-9 00:53 , Processed in 0.326051 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表