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程序来辅助判断视频播放异常的…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...