当前位置: 首页 > news >正文

Seata 分布式事务安装配置集成实战

以下是 Seata 分布式事务安装配置集成实战 的完整示例,基于 Spring Boot 和 Nacos 注册中心,涵盖服务端部署、客户端集成、业务场景演示等步骤:


一、Seata 服务端(TC)部署

1. 下载 Seata 服务端
  • 从 GitHub 发布页 下载 seata-server-1.4.0.zip(或稳定版本),解压至 /opt/seata
2. 配置 Seata 服务端
  • 修改 conf/file.conf

    store {mode = "db"  # 使用数据库模式存储事务日志db {datasource = "druid"dbType = "mysql"driverClassName = "com.mysql.jdbc.Driver"  # MySQL 8以上需改为 com.mysql.cj.jdbc.Driverurl = "jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true"user = "hydra"password = "123456"minConn = 5maxConn = 100globalTable = "global_table"branchTable = "branch_table"lockTable = "lock_table"}
    }
    
  • 修改 conf/registry.conf(以 Nacos 为例):

    registry {type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = "202274f4-218e-42bf-9251-e996df6340f8"  # 可自定义group = "SEATA_GROUP"username = "nacos"password = "nacos"}
    }
    config {type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = "202274f4-218e-42bf-9251-e996df6340f8"group = "SEATA_GROUP"}
    }
    
3. 初始化数据库
  • 创建数据库 seata,执行 script/server/db/mysql.sql 建表脚本(包含 global_tablebranch_tablelock_table)。
4. 启动 Seata 服务端
cd /opt/seata/bin
./seata-server.sh -p 8091 -h 127.0.0.1

二、Spring Boot 客户端集成

1. 创建 Spring Boot 项目
  • 使用 Spring Initializr 创建项目,添加依赖:
    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2.2.1.RELEASE</version></dependency>
    </dependencies>
    
2. 配置客户端
  • application.yml
    spring:datasource:url: jdbc:mysql://localhost:3306/testdb?useUnicode=trueusername: rootpassword: root
    seata:tx-service-group: my_tx_group  # 与服务端 vgroupMapping 对应service:vgroup-mapping:my_tx_group: defaultregistry:type: nacosnacos:server-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace: 202274f4-218e-42bf-9251-e996df6340f8
    
3. 业务代码示例
  • 实体类与 Repository(以订单服务为例):

    @Entity
    public class Order {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String productName;private Integer quantity;// Getters and Setters
    }public interface OrderRepository extends JpaRepository<Order, Long> {}
    
  • 全局事务方法

    @Service
    public class OrderService {@Autowiredprivate OrderRepository orderRepository;@GlobalTransactional(rollbackFor = Exception.class)public void createOrder(String productName, int quantity) {// 模拟业务逻辑Order order = new Order();order.setProductName(productName);order.setQuantity(quantity);orderRepository.save(order);// 模拟调用其他服务(如库存服务)// 通过 Feign 或 RestTemplate 调用}
    }
    

三、分布式事务测试

1. 启动服务
  1. 启动 Nacos 服务器(127.0.0.1:8848)。
  2. 启动 Seata 服务端(127.0.0.1:8091)。
  3. 启动 Spring Boot 应用。
2. 触发分布式事务
  • 通过 Postman 或浏览器调用 createOrder 接口,观察:
    • 成功提交global_tablebranch_table 记录事务状态,业务数据持久化。
    • 人工回滚:在事务未提交时中断,验证数据是否回滚。
3. 验证事务一致性
  • 检查数据库 testdbseata 中的数据,确保全局事务 ID(XID)关联的分支事务状态一致。

四、常见问题与解决方案

  1. 无法连接 Seata 服务端

    • 检查 registry.conf 中 Nacos 地址和命名空间是否一致。
    • 确保 Seata 服务端已启动并注册到 Nacos。
  2. 事务组名不匹配

    • 客户端 tx-service-group 需与服务端 vgroupMapping 配置对应(如 my_tx_groupdefault)。
  3. 依赖冲突

    • 排除旧版 Seata 依赖,优先使用 spring-cloud-starter-alibaba-seata

五、总结

  • 核心流程:部署 Seata 服务端 → 配置注册中心与数据库 → 集成 Spring Boot 客户端 → 定义全局事务方法。
  • 关键点
    • 使用 Nacos 统一管理配置和注册。
    • 确保事务组名、数据源配置、注册中心信息一致。
    • AT 模式下无需侵入业务代码,自动生成补偿逻辑。

通过以上步骤,可实现基于 Seata 的分布式事务完整示例,适用于微服务架构下的订单、库存等场景。

http://www.xdnf.cn/news/876097.html

相关文章:

  • Git忽略规则.gitignore不生效解决
  • 突破模型成本瓶颈:MoE如何让专业大模型更易用?​
  • echarts使用graph、lines实现拓扑,可以拖动增加effect效果
  • 力扣HOT100之二分查找:35. 搜索插入位置
  • PH热榜 | 2025-06-04
  • Facebook接入说明
  • JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?
  • 群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现
  • 列出浏览器所有的启动参数,并解释说明每个参数的含义
  • 行为型-模板模式
  • 【高校论文】DFORMER重新思考用于语义分割的RGBD表示学习[南开国防科大]
  • 电路图识图基础知识-直接启动/接触器启动(十四)
  • 分布式训练下的多进程环境
  • [Java 基础]枚举
  • NLP中的input_ids是什么?
  • Pycharm 配置解释器
  • mybatis实现插入postgresql的json类型数据
  • DA14531_beacon_大小信标设备开发
  • 如何安装并使用RustDesk
  • Java Fork/Join框架:三大核心组件深度解析
  • 功率估计和功率降低方法指南(1~2)
  • 2025年6月4日收获
  • 如何进行股票回测?
  • 第三方检测:软件适配测试报告
  • SAFe/LeSS/DAD等框架的核心适用场景如何选择?
  • Paraformer分角色语音识别-中文-通用 FunASR
  • SEO长尾关键词布局优化法
  • 二维码生成器
  • 宝马集团推进数字化转型:强化生产物流与财务流程,全面引入SAP现代架构
  • expect程序交互学习