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.pswp.cn/web/83713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python惰性函数与技术总结-由Deepseek产生

在Python中&#xff0c;惰性&#xff08;Lazy&#xff09;技术指延迟计算直到真正需要结果时才执行&#xff0c;常用于优化内存和性能。以下是常见的惰性函数和技术&#xff1a; 1. 生成器&#xff08;Generators&#xff09; 原理&#xff1a;使用 yield 返回迭代结果&#x…

轮廓 裂缝修复 轮廓修复 填补孔洞 源代码

目录 1. 形态学闭合操作填补小孔洞 完整代码: 使用 Douglas-Peucker 算法对轮廓进行多边形逼近 2.裂缝修复 轮廓修复 轮廓补全 函数封装 调用示例: 1. 形态学闭合操作填补小孔洞 完整代码: import cv2 import numpy as np# 创建模拟图像(白色区域 + 多个不规则黑洞)…

HTTP1.1

HTTP基础知识 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是用于传输超文本 的应用层协议&#xff0c;采用客户端-服务器 模型。 客户端&#xff08;如浏览器&#xff09;发起请求&#xff0c;服务器响应并返回数据。 工作原理 客户端发送HTTP请求至服…

【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作

Linux 常用操作命令&#xff1a;避免误操作指南 在 Linux 系统中&#xff0c;熟练掌握常用操作命令是高效工作的基础&#xff0c;但同时也要警惕误操作带来的风险。无论是部署程序、配置防火墙、管理端口还是处理进程&#xff0c;一个小小的失误都可能导致系统故障、数据丢失等…

PHP:Web 开发领域的常青树

在当今数字化浪潮中&#xff0c;Web 开发技术日新月异&#xff0c;各种新兴语言和框架层出不穷。然而&#xff0c;PHP 作为一门经典的后端开发语言&#xff0c;依然在 Web 开发领域占据着重要地位&#xff0c;展现出强大的生命力和广泛的应用价值。 PHP 的历史与现状 PHP&…

平均数与倍数

目录 一. 平均数现期平均数基期平均数&#xff08;比较冷门&#xff09;两期平均数-比较平均数的增长量平均数的增长率 二. 倍数基期倍数 \quad 一. 平均数 \quad 现期平均数 \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad 平均数速算技巧&#xff1a;削峰填谷…

一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (三)

现在我们主要完成AI-RAG服务的扩展&#xff0c;利用ES的向量检索能力完成历史聊天记录的存储和向量检索&#xff0c;让ai聊天有记忆。 主要做法是在首次聊天完成后将对话内容写出日志到D:\dev\dev2025\EC0601\logs\chat-his.log 写出日志同时嵌入向量 向量可以从ollama的端点&…

Vue嵌套(多级)路由

一、前言 在构建中大型单页应用(SPA)时,页面结构往往比较复杂,比如仪表盘、用户中心、商品管理等模块通常包含多个子功能页面。为了更好地组织这些页面,Vue Router 提供了嵌套(多级)路由的功能。 通过嵌套路由,我们可以在父级组件中嵌入一个 <router-view> 来展…

Kubernetes 集群安全(身份认证机制、SecurityContext、Network Policy网络策略、预防配置泄露、全面加固集群安全)

Kubernetes 集群安全(身份认证机制、SecurityContext、Network Policy网络策略、预防配置泄露、全面加固集群安全) 一、Kubernetes 身份认证机制 身份认证(Authentication): 在 K8S 中,身份认证是安全访问控制的第一道大门,它的目标是: 确认请求发起者的真实身份 K8…

【VUE3】基于Vue3和Element Plus的递归组件实现多级导航栏

文章目录 前言一、递归的意义二、递归组件的实现——基于element-plus UI的多级导航栏2.1 element-plus Menu菜单官方示例2.2 接口定义2.3 组件递归2.4 父组件封装递归组件 三、完整代码——基于element-plus UI的多级导航栏3.1 组件架构3.2 types.ts3.3 menuTreeItem.vue3.4 i…

思科资料-ACL的基础配置-详细总结

一、ACL技术 1、定义 访问控制列表访问控制列表使用包过滤技术&#xff0c;在路由器上读取第三层及第四层包头中的信息如源地址&#xff0c;目的地址&#xff0c;源端口&#xff0c;目的端口等&#xff0c;根据预先定 义好的规则对包进行过滤&#xff0c;从而达到访问控制的目…

GitHub 上 PAT 和 SSH 的 7 个主要区别:您应该选择哪一个?

在代码仓库和像 Github 这样的版本控制系统中,有时您需要安全高效地访问您的仓库。随着对更安全实践的需求日益增长,开发人员一直在寻找最高效、最安全的方式来与 Github 交互。为了解决这个问题,我们将探讨两种常用的方法:个人访问令牌 (PAT) 和安全 Shell (SSH) 密钥。本…

Vue 事件修饰符详解

Vue 事件修饰符详解 事件修饰符是 Vue 中处理 DOM 事件细节的强大工具。下面我将通过一个交互式示例全面解析各种事件修饰符的用法和原理。 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"…

初探Qt信号与槽机制

3.3 按键响应 - 初识信号与槽 3.3.1 信号与槽基本介绍 提出疑问&#xff0c;界面上已经有按键了&#xff0c;怎么操作才能让用户按下按键后有操作上的反应呢&#xff1f; 在 Qt 中&#xff0c; 信号和槽机制 是一种非常强大的事件通信机制。这是一个重要的概念&#xff0…

Android音视频流媒体基础总结

流媒体开发中&#xff0c;流媒体系统的实现从数据采集、编码封装、传输分发、接收解码播放都有哪些技术和实现&#xff0c;流媒体和本地音视频又有哪些差异&#xff1f; 影像系统开发&#xff0c;流媒体方向和普通的多媒体影像系统开发有一定差异。 相同点在于图像多媒体处理…

疫菌QBD案例

本文是《A-VAX: Applying Quality by Design to Vaccines》第七个研究的R语言解决方案。 使用带两个中心点的二水平析因设计。运行10次实验。结果是分辨度为III的设计。 A <- c(25,25,15,15,15,25,25,20,15,20) B <- c(12,8,8,12,8,12,8,10,12,10) C <- c(35,15,15…

Linux部署elasticsearch 单机版

Linux部署elasticsearch 1、下载安装包 Elasticsearch 7.8.0 | Elastic 2、安装步骤 2.1、上传安装包到服务器opt目录 2.2、解压 #目录创建/opt/module cd /opt mkdir module tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /opt/module mv elasticsearch-7.8.0 …

IDEA高效快捷键指南

1. 编辑类快捷键 编辑快捷键是最常用的一类&#xff0c;可以帮助我们快速操作代码&#xff1a; 快捷键 功能描述 Mac Windows 热度 psvm Tab 生成 main 方法 psvm Tab psvm Tab ⭐⭐⭐⭐⭐ sout Tab 生成 System.out.println() 输出语句 sout Tab sout Tab…

【论文写作参考文献地址】

参考文献地址 论文的各种参考文献地址国家哲学社会科学文献中心国家科技图书文献中心 论文的各种参考文献地址 国家哲学社会科学文献中心 资源免费!!! 整体配色就是红色&#xff0c;主页轮播有些实时新闻。 博主个人感受&#xff0c;对于计算机类的收录不是特别的充足 国家科…

华为OD机考-货币单位换算-字符串(JAVA 2025B卷)

纯暴力解法 import java.util.*; public class ExchangeMoney {public static void main(String[] args) {Scanner scanner new Scanner(System.in);while(scanner.hasNextLine()){int count Integer.parseInt(scanner.nextLine());List<String> strings new ArrayLi…