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

Seata笔记

📚事务不头疼:Seata 解决分布式事务超详细笔记


🧭 目录

  1. 为什么要使用分布式事务?
  2. Seata 是什么?
  3. Seata 三大核心角色 🎭
  4. AT 模式工作流程 🚀
  5. Seata Server(TC)安装部署 🛠️
  6. 微服务整合 Seata AT 模式实战 💻
  7. 常见问题 & 排雷清单 ⚠️
  8. 小结 & 展望 🎯

1️⃣ 为什么要使用分布式事务?

在微服务架构下,一个业务操作往往需要跨多个服务、跨多个数据源。
传统单机事务(@Transactional)只能保证单个数据库 ACID,无法解决跨库跨服务的“数据不一致”问题。
因此,我们需要分布式事务来确保全局一致性。


2️⃣ Seata 是什么?

  • 官方定义:Seata 是一款开源的分布式事务解决方案,致力于提供高性能简单易用的分布式事务服务。
  • 推荐模式:官方首推 AT 模式,业务零侵入

🍀 一句话总结:Seata = 分布式事务的“瑞士军刀”。


3️⃣ Seata 三大核心角色 🎭

角色全称职责类比
TCTransaction Coordinator事务协调者:维护全局 & 分支事务状态,驱动提交/回滚法官 👨‍⚖️
TMTransaction Manager事务管理器:定义全局事务边界(开始/提交/回滚)指挥官 🧑‍✈️
RMResource Manager资源管理器:管理分支事务资源,与 TC 通信士兵 🪖

4️⃣ AT 模式工作流程 🚀

以“用户下单”场景为例:订单服务 + 库存服务 + 账户服务

  1. TM(订单服务)向 TC 申请全局事务 XID
  2. XID 在微服务链路透传(HTTP Header/RPC 上下文)
  3. 各 RM 向 TC 注册分支事务
  4. 执行业务 SQL 并提交本地事务(先本地提交,再全局二阶段)
  5. TM 通知 TC 全局提交/回滚
  6. TC 驱动各 RM 分支事务提交/回滚

🔑 关键点:AT 模式利用 undo_log 表实现反向补偿。


5️⃣ Seata Server(TC)安装部署 🛠️

🏷️ 版本选择

  • Seata Version:2.0.0
  • 下载地址:seata-server-2.0.0.zip

📦 存储模式对比

模式特点生产可用?
file单机内存 + 本地文件,性能高❌ 仅测试
db数据库存储,高可用✅ 推荐
redis性能高,存在数据丢失风险⚠️ 需自行保障持久化
raft多 TC 数据同步(实验性)❌ 不成熟

最终选型:db + Nacos(注册 & 配置中心)

🗄️ 数据库准备

-- 创建 seata 库
CREATE DATABASE seata DEFAULT CHARACTER SET utf8mb4;
-- 执行官方脚本
mysql -uroot -p seata < seata-server-2.0.0/seata/script/server/db/mysql.sql

🪄 Nacos 配置步骤

  1. 注册中心
    修改 conf/application.yml

    seata:registry:type: nacosnacos:server-addr: 127.0.0.1:8848namespace: seatagroup: SEATA_GROUPcluster: default
    
  2. 配置中心

    • 获取 script/config-center/config.txt
    • 修改存储模式 & MySQL 连接
    • 在 Nacos 新建 seataServer.properties(Data ID),Group 为 SEATA_GROUP,内容即修改后的 config.txt
  3. 启动 Seata Server
    Windows 双击 bin/seata-server.bat
    浏览器访问 http://localhost:7091(账号/密码:seata)


6️⃣ 微服务整合 Seata AT 模式实战 💻

🎯 业务场景

用户下单 → 扣库存 → 扣余额,三服务分布式事务。

🧩 整合步骤(以订单服务为例)

  1. 引入依赖

    <dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>2.0.0</version>
    </dependency>
    
  2. 业务库新增 undo_log 表

    CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
  3. application.yml 配置 Seata

    seata:registry:type: nacosnacos:server-addr: 127.0.0.1:8848namespace: seatagroup: SEATA_GROUPconfig:type: nacosnacos:server-addr: 127.0.0.1:8848namespace: seatagroup: SEATA_GROUPtx-service-group: default_tx_group   # 事务分组
    
  4. 全局事务入口加注解

    @GlobalTransactional(name = "order-create", rollbackFor = Exception.class)
    public Order createOrder(OrderDTO dto) {// 本地保存订单// 远程调用库存服务 & 账户服务
    }
    

🛒 库存 & 账户服务

  • 步骤 1~3 与订单服务相同
  • 仅需在扣减方法上@Transactional

7️⃣ 常见问题 & 排雷清单 ⚠️

问题现象排查思路
ConfigNotFoundException: service.vgroupMapping.default_tx_group微服务启动报错① 检查 seata.tx-service-group 是否配置
② 确认 Nacos 配置中心存在该配置项
③ 检查 namespace & group 一致性
Communications link failureTC 启动报错① 检查 seataServer.properties 中 JDBC URL / 账号 / 密码
② 确认 MySQL 版本与驱动匹配
回滚成功但外层代码捕获不到 BusinessExceptionSeata 2.0.0 Bug建议:生产环境避免使用 2.0.0,等待后续修复

8️⃣ 小结 & 展望 🎯

  • ✅ 通过 Seata,我们轻松解决了微服务下的分布式事务难题。
  • ⚙️ 生产推荐:db 存储 + Nacos 双中心,避开 2.0.0 已知 Bug。
  • 🚀 更多高级特性(TCC、Saga、XA 模式)以及性能调优,敬请期待后续《Seata 实战课程》!

如果本笔记对你有帮助,记得 一键三连 👍⭐🔄 哦!

http://www.dtcms.com/a/340101.html

相关文章:

  • Day22 顺序表与链表的实现及应用(含字典功能与操作对比)
  • 不同语言的并发模型对比:Go、Java与Python
  • Python脚本每天爬取微博热搜-终版
  • 重塑酒店投屏体验:私密投屏技术的革新应用
  • GStreamer无线图传:从树莓派到计算机的实现方案
  • 20250819 强连通分量,边双总结
  • 嵌入式-SPI的IO引脚初始化、模块初始化、数据的收发-Day16
  • Codeforces 盒装苹果
  • vLLM加载lora
  • CF266E More Queries to Array... Solution
  • GPFS不同存储方式的优劣
  • 2943. 最大化网格图中正方形空洞的面积
  • Manus AI 与多语言手写识别技术深度剖析
  • 不同的 Text2sql 方式优缺点探究
  • 智慧校园中IPTV融合对讲:构建高效沟通新生态
  • Unity常用工具及默认快捷键
  • PowerBI登录出错解决过程
  • YOLO多模态改进系列 | YOLOFuse:多模态融合的 Slim-Neck 改进
  • java面试——多线程
  • C++高频知识点(二十九)
  • HarmonyOS 中的 泛型类和泛型接口
  • 51单片机拼接板(开发板积木)
  • 爬小红书搜索详情软件:根据关键词采集笔记详情,包含正文内容、发布时间、转评赞藏等
  • C++开发基础之:队列用法与生产者消费者模型实战和可直接复用的线程安全的队列
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • 会话技术之<Cookie>和<Session>的区别联系
  • “数据权限”的道和术
  • 从 SGD 到梯度累积:Epoch、Batch、Step 的关系全解析
  • 使用redis读写锁实现抢券功能
  • Hive 存储管理测试用例设计指南