seata 各个微服务回滚的时机

news/2024/11/27 19:01:47/

在Seata中,当你在服务方法上使用@GlobalTransactional注解时,Seata会为该全局事务创建一个事务上下文,并在远程服务调用时传递这个事务上下文。Seata客户端会拦截你的Feign调用,并在调用前后进行额外的处理。

以下是Seata如何知道远程服务调用失败并触发全局事务回滚的步骤:

事务上下文传播:当你通过OpenFeign发起远程调用时,Seata会拦截这个调用,并将当前的全局事务XID(事务ID)通过HTTP请求头传递给远程服务。
远程服务拦截:在远程服务端,Seata的拦截器会检查请求头中的XID,并将其绑定到当前的服务线程上下文中,使得远程服务也参与到同一个全局事务中。
异常处理:如果在远程服务的方法执行过程中抛出了异常,Seata的异常处理器会捕获这个异常。
标记事务分支状态:捕获到异常后,Seata会将当前服务的事务分支标记为BranchTransactionStatus.PhaseOne_Failed,这意味着事务分支执行失败。
回滚通知:远程服务会将事务分支的失败状态通知给TC(Transaction Coordinator,事务协调器)。
全局事务回滚决策:TC在接收到事务分支失败的通知后,会根据全局事务的状态和策略来决定是否需要回滚整个全局事务。如果决定回滚,TC会通知所有参与全局事务的服务进行回滚操作。
回滚执行:每个参与的服务收到回滚通知后,会执行本地事务的回滚操作,比如数据库的逆向操作。
在你提供的代码中,如果itemClient.deductStock(detailDTOS);商品服务抛出了异常,注意itemClient.deductStock(detailDTOS);方法本身不抛出异常,是商品服务内部出现异常,以下是可能发生的情况:

如果这个异常没有被捕获,或者被捕获后重新抛出,Seata的拦截器会捕获这个异常。
Seata拦截器会将异常转换为TransactionException,并通知TC当前分支事务失败。
TC根据全局事务的状态,可能会触发全局事务的回滚。
请注意,为了确保Seata能够正确处理异常,你应该确保:

远程服务在捕获异常后,应该将其抛出或者转换为Seata能够识别的异常类型。
你应该配置Seata的异常处理规则,以确保当远程服务返回特定的响应状态码(如500)时,Seata能够将其视为事务失败。


http://www.ppmy.cn/news/1550419.html

相关文章

动态规划之背包问题

0/1背包问题 1.二维数组解法 题目描述:有一个容量为m的背包,还有n个物品,他们的重量分别为w1、w2、w3.....wn,他们的价值分别为v1、v2、v3......vn。每个物品只能使用一次,求可以放进背包物品的最大价值。 输入样例…

Linux—进程概念学习-03

目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…

【AI系统】昇腾 AI 架构介绍

昇腾 AI 架构介绍 昇腾计算的基础软硬件是产业的核⼼,也是 AI 计算能⼒的来源。华为,作为昇腾计算产业⽣态的⼀员,是基础软硬件系统的核⼼贡献者。昇腾计算软硬件包括硬件系统、基础软件和应⽤使能等。 而本书介绍的 AI 系统整体架构&#…

RPC学习

一、什么是 RPC RPC(Remote Procedure Call),即远程过程调用,是一种计算机通信协议,它允许运行在一台计算机上的程序调用另一台计算机上的子程序或函数,就好像调用本地程序中的函数一样,无需程序…

web-03

CSS回顾 选择器 标签选择器 标签{}ID选择器 标签中定义ID属性。 #ID值{}类选择器 标签中使用class属性 .类名{}关于DIV/span div任意的大小的长方形,大小css: width, height控制。—换行 span-- 一行内 CSS常用属性 width/height 宽度/高度 定义&…

鸿蒙多线程开发——sendable共享容器

1、异步锁机制 在介绍共享容器之前,先介绍异步锁机制。 为了解决多线程并发任务间的数据竞争问题,ArkTS引入了异步锁能力。异步锁可能会被类对象持有,因此为了更方便地在并发实例间获取同一个异步锁对象,AsyncLock对象支持跨线程…

docker-compose部署java服务

文章目录 一、下载安装docker-compose二、编写Dockerfile文件三、编写docker-compose.yml文件配置说明 四、服务启动五、测试与验证 一、下载安装docker-compose 在安装docker时,并不会同时把docker-compose安装好,需要额外安装一下 下载docker-compos…

C语言超详细教程

系列文章目录 文章目录 系列文章目录1 运算符1.1 算术运算符:2 控制语句2.1 条件语句:2.2 循环语句:3 函数3.1 函数的定义与声明:3.2 递归函数:4 指针4.1 指针的定义与使用函数指针:5. 数组与字符串5.1 数组一维数组:相同类型元素的集合(如:多维数组:数组的数组(如:…