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

Seata如何与Spring Cloud整合?

🔧 一、整合核心步骤

1. 启动 Seata Server(TC)
  • 环境准备
    • 修改 registry.conf,指定注册中心(如 Nacos)和配置中心:
      registry {type = "nacos"nacos {serverAddr = "localhost:8848"namespace = "public"}
      }
      config {type = "nacos"nacos { serverAddr = "localhost:8848" }
      }
      
    • 同步配置到 Nacos:
      sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP
      
    • 启动 Seata Server:
      bin/seata-server.sh -p 8091
      
  • 高可用:集群部署时需确保所有节点使用相同的注册中心和事务分组。
2. 客户端(微服务)配置
  • 依赖引入(Spring Cloud Alibaba):
    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><exclusions><exclusion><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId></exclusion></exclusions>
    </dependency>
    <dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.4.2</version>
    </dependency>
    
  • 事务分组配置application.yml):
    seata:tx-service-group: my_tx_group  # 事务分组名,需与Seata Server配置一致service:vgroup-mapping:my_tx_group: default       # 映射到Seata Server集群名registry:type: nacosnacos:server-addr: localhost:8848
    

    📌 注tx-service-group 需在所有参与事务的微服务中保持一致。

3. 业务库准备
  • 创建 undo_log(AT 模式必需):
    CREATE TABLE `undo_log` (`branch_id` BIGINT NOT NULL,`xid` VARCHAR(100) NOT NULL,`rollback_info` LONGBLOB NOT NULL,UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
    ) ENGINE=InnoDB;
    
    此表用于记录事务回滚日志。
4. 数据源代理
  • 自动代理(推荐):
    seata:enable-auto-data-source-proxy: truedata-source-proxy-mode: AT   # 可选 AT/XA 模式
    
  • 手动代理(需自定义数据源):
    @Bean
    public DataSource dataSourceProxy(DataSource druidDataSource) {return new DataSourceProxy(druidDataSource); // 包装原生数据源
    }
    
    确保所有数据库操作通过 DataSourceProxy 执行。
5. 事务注解使用
  • 事务发起方的方法上添加 @GlobalTransactional
    @RestController
    public class OrderController {@GlobalTransactional(rollbackFor = Exception.class)@PostMapping("/create")public String createOrder() {orderService.create();inventoryService.deductStock(); // 通过Feign调用其他服务if (error) throw new RuntimeException("回滚");}
    }
    
  • XID 传递:通过 Feign/RestTemplate 调用时,Seata 自动传递全局事务 ID(XID)。

⚙️ 二、事务模式配置

1. AT 模式(默认)
  • 依赖 undo_log 表实现自动回滚。
  • 要求业务表有单列主键,不支持多列主键(MySQL除外)。
2. TCC 模式
  • 需自定义 TCC 接口:
    @LocalTCC
    public interface TccAction {@TwoPhaseBusinessAction(name = "prepare", commitMethod = "commit", rollbackMethod = "rollback")boolean prepare(BusinessActionContext ctx, @BusinessActionContextParameter(paramName = "param") String param);boolean commit(BusinessActionContext ctx);boolean rollback(BusinessActionContext ctx);
    }
    
  • 通过 @GlobalTransactional 调用 TCC 方法。
3. XA 模式
  • 开启 MySQL XA 支持:
    [mysqld]
    innodb_support_xa=1
    
  • 修改配置:
    seata:data-source-proxy-mode: XA
    
    适用于强一致性场景。

⚠️ 三、关键注意事项

  1. 版本兼容性

    组件推荐版本
    Spring Cloud Alibaba2.1.1.RELEASE (Seata 1.4)
    Seata Client1.4.0+
    Nacos Server1.2.1+
    避免使用 spring-cloud-alibaba-seata:2.1.2+ 与 Seata 1.4.0 组合(存在兼容问题)。
  2. 配置一致性

    • Seata Server 与客户端的 registry.conf 和事务分组配置必须一致
    • 若使用 Nacos 配置中心,需通过 nacos-config.sh 同步配置。
  3. 常见问题

    • 连接失败:检查事务分组映射(vgroup-mapping)和 Seata Server 注册状态。
    • 数据源冲突:排除 Druid 自动配置(如 druid-spring-boot-starter)或降级 Druid 版本。
    • 跨服务调用:确保 Feign/RestTemplate 的拦截器已启用(Spring Cloud Alibaba 默认集成)。

💎 四、最佳实践

  • 事务粒度@GlobalTransactional 应加在业务入口层(如 Controller 或 Facade 服务)。
  • 冷热分离:高频事务服务使用独立数据源,避免 undo_log 表成为性能瓶颈。
  • 熔断降级:结合 Sentinel 防止事务阻塞导致雪崩。

通过以上步骤,Seata 可无缝集成到 Spring Cloud 微服务中,解决跨服务事务一致性问题。完整示例参考:Seata + Spring Cloud 实战代码。

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

相关文章:

  • MATLAB交互式贝塞尔曲线演示
  • Softhub软件下载站实战开发(一):项目总览
  • python中判断与循环使用
  • 怎么理解自动驾驶技术中的agent
  • MVVM框架:让前端开发像搭积木一样简单!
  • spring-security5-oauth2系列:密码授权模式
  • Go同步原语与数据竞争:原子操作(atomic)
  • 【LangChain】4 基于文档的问答
  • 【量化】策略交易之动量策略(Momentum)
  • Transformer实战——从词袋模型到Transformer:NLP技术演进
  • Kubernetes镜像拉取认证指南
  • 勇者和魔塔的算法题
  • Linux进程池详解:从入门到理解
  • Vue 3 九宫格抽奖系统,采用优雅的 UI 设计和流畅的动画效果
  • 【工具变量】全国分省数字基础设施水平数据集-含原始数据及处理代码(2005-2024年)
  • LLMs 系列实操科普(6)
  • 网络代理设置
  • leetcode0765. 情侣牵手-hard
  • HTTP和HTTPS协议
  • Design Compiler:解组(Ungroup)
  • Modbus协议全方位解析与C#开发实战指南
  • Apache Doris FE 问题排查与故障分析全景指南
  • TI 毫米波雷达走读系列—— 3DFFT及测角
  • python基础举例
  • 人工智能学习19-Pandas-设置
  • OSI 七层网络模型
  • 分类预测 | Matlab基于AOA-VMD-LSTM故障诊断分类预测
  • WebSocket与XMPP:即时通讯技术的本质区别与选择逻辑优雅草卓伊凡|片翼|许贝贝
  • day31 打卡
  • 语音交互革命:基于 Amazon Nova Sonic + MCP 构建下一代沉浸式 Agent