首页 5G技术

Seata 1.7.0 本地化极速部署:基于 Nacos 与 MySQL 的最佳实践 (Mac & Windows)

分类:5G技术
字数: (6164)
阅读: (5258)
内容摘要:Seata 1.7.0 本地化极速部署:基于 Nacos 与 MySQL 的最佳实践 (Mac & Windows),

在微服务架构中,分布式事务一直是一个难题。Seata 作为一款优秀的开源分布式事务解决方案,越来越受到开发者的青睐。本文将详细介绍如何在 Mac 和 Windows 环境下,使用 Nacos 作为配置中心和注册中心,MySQL 存储信息,本地部署 Seata 1.7.0。我们将深入探讨每个步骤,并提供实战经验,帮助您避免常见问题。

问题场景重现

很多开发者在尝试本地部署 Seata 时,会遇到各种问题,比如 Nacos 连接失败、数据源配置错误、Seata Server 启动异常等等。这些问题往往是因为配置不正确或者对 Seata 的底层原理理解不够深入。本文旨在解决这些痛点,提供一个清晰、完整的部署方案。

底层原理深度剖析

Seata 的核心思想是 AT 模式,它通过对业务 SQL 的解析,生成 undo log,在事务提交时,将 undo log 删除,事务回滚时,根据 undo log 恢复数据。Nacos 在 Seata 中扮演着配置中心和注册中心的角色。作为配置中心,Nacos 存储 Seata 的各种配置信息,例如数据库连接信息、事务组信息等;作为注册中心,Nacos 负责服务注册与发现,让 Seata Server 和 TC(Transaction Coordinator)可以互相找到对方。MySQL 用于存储 Seata 的事务信息,例如事务状态、全局锁等。

环境准备

  • JDK: 1.8 或以上
  • Maven: 3.5 或以上
  • Nacos: 1.4.1 或以上 (建议最新稳定版)
  • MySQL: 5.7 或以上
  • Seata: 1.7.0

Nacos 安装与配置

  1. 下载 Nacos:Nacos 官网 下载最新稳定版的 Nacos。

  2. 解压 Nacos: 将下载的压缩包解压到本地目录,例如 /Users/yourname/nacos (Mac) 或 C:\nacos (Windows)。

    Seata 1.7.0 本地化极速部署:基于 Nacos 与 MySQL 的最佳实践 (Mac & Windows)
  3. 启动 Nacos: 进入 Nacos 的 bin 目录,执行启动命令。

    • Mac/Linux: ./startup.sh -m standalone
    • Windows: startup.cmd -m standalone

    -m standalone 参数表示以单机模式启动 Nacos。生产环境建议使用集群模式。

  4. Nacos 控制台: 启动成功后,访问 http://localhost:8848/nacos,默认用户名密码为 nacos/nacos。建议修改默认密码。

MySQL 配置

  1. 创建数据库: 在 MySQL 中创建一个名为 seata 的数据库,字符集使用 utf8mb4,排序规则使用 utf8mb4_general_ci

    Seata 1.7.0 本地化极速部署:基于 Nacos 与 MySQL 的最佳实践 (Mac & Windows)
    CREATE DATABASE seata CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
  2. 创建undo_log表: 执行 Seata 提供的 SQL 脚本,创建 undo_log 表。脚本位于 Seata 解压目录的 db_script/mysql.sql。这是Seata AT 模式的核心,记录了数据修改前的状态。

    -- ----------------------------------------------------------------------
    -- For AT mode you must to init this sql
    -- ----------------------------------------------------------------------
    CREATE TABLE IF NOT EXISTS `undo_log` (
      `branch_id` BIGINT NOT NULL COMMENT 'branch transaction id',
      `xid` VARCHAR(128) NOT NULL COMMENT 'global transaction id',
      `context` VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
      `rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info',
      `log_status` INT(11) NOT NULL COMMENT '0:normal status,1:defense status',
      `log_created` DATETIME NOT NULL COMMENT 'create datetime',
      `log_modified` DATETIME NOT NULL COMMENT 'modify datetime',
      UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='undo_log';
    

Seata Server 配置

  1. 下载 Seata Server:Seata 官网 下载 Seata Server 1.7.0。

  2. 解压 Seata Server: 将下载的压缩包解压到本地目录,例如 /Users/yourname/seata-server (Mac) 或 C:\seata-server (Windows)。

  3. 修改 Seata Server 配置: 修改 conf/application.yml 文件。

    Seata 1.7.0 本地化极速部署:基于 Nacos 与 MySQL 的最佳实践 (Mac & Windows)
    • 注册中心配置: 配置 Nacos 作为注册中心。

      registry:
        type: nacos
        nacos:
          serverAddr: 127.0.0.1:8848 # Nacos 地址
          namespace: # Nacos 命名空间,默认为空
          group: SEATA_GROUP
      
    • 配置中心配置: 配置 Nacos 作为配置中心。

      config:
        type: nacos
        nacos:
          serverAddr: 127.0.0.1:8848 # Nacos 地址
          namespace: # Nacos 命名空间,默认为空
          group: SEATA_GROUP
          dataIdPrefix: seata # Data ID 前缀
      
    • 数据库配置: 配置 MySQL 数据源。推荐使用 dbcp 连接池,性能较好。记得替换成你实际的数据库用户名和密码。

      store:
        db:
          dbType: mysql
          driverClassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
          user: root
          password: your_password
          minConn: 5
          maxConn: 20
      
  4. 启动 Seata Server: 进入 Seata Server 的 bin 目录,执行启动命令。

    Seata 1.7.0 本地化极速部署:基于 Nacos 与 MySQL 的最佳实践 (Mac & Windows)
    • Mac/Linux: ./seata-server.sh
    • Windows: seata-server.bat

项目集成 Seata

  1. 引入 Seata Starter: 在你的项目中,引入 Seata Starter 依赖。对于 Spring Boot 项目,可以使用 spring-cloud-starter-alibaba-seata

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
        <version>2021.0.1.0</version>
    </dependency>
    
  2. 配置 Seata: 在你的 Spring Boot 项目的 application.ymlapplication.properties 文件中,配置 Seata 相关信息。

    seata:
      tx-service-group: default_tx_group # 事务组名称
      enable-auto-data-source-proxy: true # 开启自动代理数据源,方便 AT 模式使用
      undo: # undo配置
        data-source-proxy: AT
      registry:
        type: nacos
        nacos:
          server-addr: 127.0.0.1:8848 # Nacos 地址
          namespace:  # Nacos 命名空间,默认为空
    
  3. 开启分布式事务: 在需要进行分布式事务的方法上,添加 @GlobalTransactional 注解。

    @GlobalTransactional(name = "my_test_tx", rollbackFor = Exception.class)
    public void myDistributedTransaction() {
        // ... 业务逻辑 ...
    }
    

实战避坑经验总结

  • Nacos 版本兼容性: 确保 Seata Server 和 Seata Starter 使用的 Nacos 版本兼容,避免出现注册失败的问题。
  • 数据库连接池配置: 合理配置数据库连接池的大小,避免连接数不足或连接数过多导致性能问题。可以根据实际并发量进行调整。常见的连接池有 HikariCP,Druid等。
  • 事务组名称: 确保所有参与分布式事务的服务使用相同的事务组名称,否则事务无法正常进行。
  • undo_log 表: undo_log 表是 Seata AT 模式的核心,必须确保表结构正确,并且 Seata Server 有权限访问该表。如果出现 undo_log 相关错误,仔细检查数据库配置和表结构。
  • 排查问题: 善用 Seata 提供的日志,可以帮助你快速定位问题。Seata 默认会将日志输出到控制台和文件中。可以通过修改 conf/logback.xml 文件来调整日志级别和输出格式。

通过以上步骤,您就可以在 Mac 和 Windows 环境下成功部署 Seata 1.7.0,并使用 Nacos 作为配置中心和注册中心,MySQL 存储信息。希望本文能够帮助您解决实际开发中遇到的问题。

Seata 1.7.0 本地化极速部署:基于 Nacos 与 MySQL 的最佳实践 (Mac & Windows)

转载请注明出处: 代码一只喵

本文的链接地址: http://m.acea2.store/blog/082256.SHTML

本文最后 发布于2026-04-26 22:44:27,已经过了1天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 追梦人 8 小时前
    Seata 的配置确实比较繁琐,这篇文章把关键点都提到了,省了不少时间。