SpringCloud Seata集成分布式事务管理 事务保护 XA AT两种模式的区别
介绍
阿里巴巴的 Seata(Service Aligned Transaction Alternative)是一个开源的分布式事务解决方案,旨在解决微服务架构中跨服务、跨数据库的事务一致性问题。它可以帮助开发者管理分布式系统中的全局事务,确保在多个服务之间的事务一致性。
引入依赖
<!--seata-->
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.6.1</version>
</dependency>
配置
每个服务中引入
seata:registry: #注册中心的配置type: nacos #注册中心类型为nacosnacos:server-addr: 172.23.4.128:8848 #服务注册地址namespace: "" #命名空间group: DEFAULT_GROUP #默认DEFAULT_GROUPapplication: seata-server #服务名称tx-service-group: test #事务组名称service:vgroup-mapping: #事务与组的映射关系test: "default"
XA模式
-
阶段1:预提交阶段
参与事务的各个资源(如数据库)会锁定事务需要的资源并准备执行。此时,Seata 会询问每个参与者是否可以提交,参与者进行本地准备并响应是否可以提交。 -
阶段2:提交或回滚阶段
如果所有参与者都可以提交(即没有遇到错误),Seata 会发出全局提交请求;否则,发出回滚请求。 -
事务一致性:采用 XA 协议保证跨多个资源的事务的一致性,确保事务在分布式环境中能实现原子性操作。
-
资源协调:Seata 作为事务协调者,协调所有参与资源的提交与回滚,确保最终一致性。
-
回滚与补偿:若事务失败,Seata 会确保通过回滚来恢复到事务开始前的状态。
-
支持的数据库:Seata XA模式支持通过 XA 协议的数据库,常见的如 MySQL、Oracle 等,前提是这些数据库支持 XA 协议。
缺点
性能开销:XA 模式的两阶段提交协议需要多次通信和锁定资源,可能会导致性能下降,特别是在大规模、高并发的场景中。
支持的资源类型较少:XA 协议主要支持数据库等传统资源,对于一些新型的分布式资源(如消息队列、缓存等)可能支持不够好,或者实现较复杂。
开启XA模式
在全局配置中添加
seata:data-source-proxy-mode: XA #开启XA模式
开启事务
@GetMapping("/pay")@GlobalTransactionalpublic SaResult pay(){//假设余额扣减String userId=StpUtil.getLoginIdAsString();LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.eq(User::getId, userId) // 根据用户ID进行查询.setSql("play_num = play_num - 1"); // 扣减play_numberuserService.update(updateWrapper);if(true){ //模拟报错int i = 1 / 0;}goodsClient.delete();//删除return SaResult.ok();}
相关的服务也需要 @Transient
@DeleteMapping("/delete")@Transientpublic Boolean delete(){return goodsService.removeById(1);}
这里进行了两次SQL,一次是自己的user库,一个是远程调用的微服务。如果其中一个报错了都会保证数据的一致性。
AT模式
主推的是AT模式,AT模式同样是分阶段提交的事务模型,缺弥补了XA模型中资源锁定周期过长的缺陷。AT模式会导致几毫秒的数据不一致因为立马提交了SQL语句。
运行步骤:
阶段一:注册事务分支->记录undo-log(数据快照) ->执行业务SQL并提交
阶段二:删除undo-log(数据快照)

因此如果使用AT模式需要给每一个微服务都添加undo-log表。
相关文档:https://seata.apache.org/zh-cn/docs/v1.5/overview/what-is-seata
创建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 AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
修改AT模式
data-source-proxy-mode: AT
去除默认就是AT模式
seata:data-source-proxy-mode: AT
SQL日志
事务开始时会先记录快照如果报错就会回滚。


如何选择模式
如果对业务一致性高的话选择XA模式会对数据库进行锁表,对于性能要求选择AT模式,AT模式会导致几毫秒的数据不一致因为立马提交了SQL语句。
相关文章:
SpringCloud Seata集成分布式事务管理 事务保护 XA AT两种模式的区别
介绍 阿里巴巴的 Seata(Service Aligned Transaction Alternative)是一个开源的分布式事务解决方案,旨在解决微服务架构中跨服务、跨数据库的事务一致性问题。它可以帮助开发者管理分布式系统中的全局事务,确保在多个服务之间的事…...
node.js基础学习-querystring模块-查询字符串处理(三)
一、前言 querystring是 Node.js 中的一个内置模块,主要用于处理 URL 查询字符串。它提供了一些实用的方法来解析和格式化查询字符串,使得在处理 HTTP 请求中的查询参数等场景时非常方便。 还可以防止sql注入 二、解析查询字符串(parse方法&a…...
电子电气架构 --- 车载网关GW连接外部IP Tester
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
鸿蒙LiteOS的核心架构
鸿蒙LiteOS是华为公司推出的一款面向物联网领域的轻量级操作系统,它专为资源受限设备设计,旨在满足智能穿戴设备、智能家居、智能出行等领域的应用需求。鸿蒙LiteOS不仅能够支持多种硬件平台,还具备超低功耗、快速启动、高安全性等特性&#…...
C语言——实现计算房屋总价
//功能:计算房屋总价 //房屋总价 房屋面积 * 单价 //契税 房屋总价 * 0.15% //印花税 房屋总价 * 0.05% //功能:计算房屋总价 //房屋总价 房屋面积 * 单价 //契税 房屋总价 * 0.15% //印花税 房屋总价 * 0.05%#include<stdio.h>void main()…...
【380】基于springboot的闲置图书分享
摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…...
element-ui的下拉框报错:Cannot read properties of null (reading ‘disabled‘)
在使用element下拉框时,下拉框option必须点击输入框才关闭,点击其他地方报错:Cannot read properties of null (reading disabled) 造成报错原因:项目中使用了el-dropdown组件,但是在el-dropdown里面没有定义el-dropdo…...
VMware虚拟机——安装保姆级教程(附安装包)
一、下载 1、官方正版VMware下载链接:https://pan.quark.cn/s/c9ff7c6e06d7 2、Linux镜像下载(CentOS7)链接:https://pan.quark.cn/s/4df5f93fb83d 二、安装VMware 1、创建VMware所需文件夹 (1)找一个…...
如何实现表格选中时禁用树结构的复选框功能(El-Tree 与 El-Table 联动实现)
在前端开发中,树形结构和表格是常用的组件组合,尤其是在展示和管理复杂数据时。使用 Element UI 的 el-tree 和 el-table 组件,我们可以实现当表格中有选中行时,自动禁用树结构中的复选框,反之亦然。这不仅提升了用户体…...
STM32CUBEIDE FreeRTOS操作教程(十):interrupt on/off中断开关
STM32CUBEIDE FreeRTOS操作教程(十):interrupt on/off中断开关 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件,不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发…...
Linux的基本操作及虚拟机设置
文章目录 Linux的目录结构Linux中的常见目录 VI和VIM编辑器什么是VI和VIM编辑器VIM的一般模式VIM的编辑模式VIM的命令模式模式间的切换 虚拟机网络配置查看网络信息修改网络配置信息查看和修改主机名服务管理类命令 虚拟机管理操作VMware为虚拟机拍摄快照VMware为虚拟机执行克隆…...
oracle 用户手册
Oracle用户手册 一、Oracle数据库概述 定义与用途 Oracle数据库是一款功能强大的关系型数据库管理系统(RDBMS)。它用于存储和管理大量的结构化数据,广泛应用于企业级应用、金融系统、电商平台等各种需要高效数据处理和存储的场景。例如,银行使用Oracle数据库来存储客户账户…...
Flutter-Web打包后上线白屏
问题描述 Flutter上线后进行测试发现界面白屏,打开开发者模式查看网络发现加载main.js文件404 问题原因 我上线的地址是https://xxx:8091/homedots,但是我打包后的index文件中的baseUrl是"/",将地址改成”/homedots/",注意homedots后面…...
解决linux访问huggingface的问题(操作记录)
目录 一、clash软件(linux)的下载 二、clash软件(linux)的使用 三、linux命令行访问huggingface 1、问题分析 2、设置命令行代理 四、补充(windows的linux虚拟机) 五、参考链接 一、clash软件&#…...
Android Studio 右侧Gradle窗口只有test的task问题解决
目录 运行环境问题现象解决方案1、打开Settings设置界面2、设置选项3、重启Android Studio4、重新Sync工程 运行环境 Android Studio Giraffe | 2022.3.1 Patch 3 Android SDK 33 Gradle 8.0.1 JDK 17 问题现象 Android Studio右侧Gradle窗口下只有test的task,其他…...
Spring AOP 的实现和切点表达式的介绍
1. 快速入手 AOP:就是面相切面编程,切面指的就是某一类特定的问题,也可以理解为面相特定方法编程,例如之前使用的拦截器,就是 AOP 思想的一种应用,统一数据返回格式和统一异常处理也是 AOP 思想的实现方式…...
【赛博保安】安全日记之常用术语(一)
"企业的信息安全治理水平,直接取决于安全团队人员的技术专业度,而非运营经验值。所谓的技术,并非指渗透和挖洞的能力,而是指软件开发、IT 架构、网络拓扑相关的知识和经验。 站在乙方的角度来看,技术薄弱的安全人…...
C++ 中的 string 类:全面解析与应用实践(上)
🤖🌟 欢迎降临张有志的未来科技实验室🤖🌟 专栏:C 👨💻👩💻 先赞后看,已成习惯👨💻👩💻…...
量化交易系统开发-实时行情自动化交易-8.7.文华平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于文华平台介绍。 文华财经…...
美畅物联丨如何通过 FFmpeg 解码视频
FFmpeg是一款功能强大、在多媒体处理领域广泛应用的开源工具。它可以处理多种音频和视频格式,包含编码、解码、转码、流媒体处理等众多功能。前两天,我们在《美畅物联丨如何通过FFmpeg排查视频问题》一文中介绍了借助FFmpeg程序来辅助判断视频播放异常的…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
