tcc-transaction 源码分析

news2024/10/6 20:35:46

tcc介绍

tcc介绍查看我之前的文章: https://caicongyang.blog.csdn.net/article/details/119721282?spm=1001.2014.3001.5502

tcc-transaction 介绍: http://mengyun.org/zh-cn/index.html

本文基于2.x 最新版本:https://github.com/changmingxie/tcc-transaction

核心流程

核心类: org.mengyun.tcctransaction.interceptor.CompensableTransactionAspect 可补偿的事物拦截器

核心类:org.mengyun.tcctransaction.interceptor.ResourceCoordinatorAspect 资源协调拦截器

两个类通过子类继承 Ordered 接口来实现CompensableTransactionAspect 先调用,后调用ResourceCoordinatorAspect接口;

核心流程:

@startuml
Compensable -> CompensableTransactionAspect
CompensableTransactionAspect -> compensableTransactionInterceptor :  interceptCompensableMethod
CompensableTransactionInterceptor ->CompensableTransactionInterceptor : rootMethodProceed开启事务
Compensable -> ResourceCoordinatorAspect
ResourceCoordinatorAspect -> ResourceCoordinatorInterceptor:interceptTransactionContextMethod,事物参与者加入,并执行真正执行TRYING阶段的方法
CompensableTransactionInterceptor -> CompensableTransactionInterceptor:  typing方式执行成功执行transactionManager.commit 否则执行rollback方法
CompensableTransactionInterceptor -> Transaction:  commit()所有食物参与都执行confirm 方法
CompensableTransactionInterceptor -> Transaction:rollback() 所有事物参与都执行CANCEL方法
@enduml

在这里插入图片描述

http 支持

FeignInterceptor继承feign拦截器RequestInterceptor把TransactionContext 传递到下一个应用

下一个应用通过 RequesterInterceptor 将TransactionContext 获取重新放到 TransactionContextHolder 中

dubbo 支持

生产者:org.mengyun.tcctransaction.dubbo.filter.TransactionContextDecodeFilter 传递transaction上下文

消费者:org.mengyun.tcctransaction.dubbo.interceptor.TransactionContextEncodeInterceptor 获取上下文

通过该类org.mengyun.tcctransaction.dubbo.interceptor.CompensableTransactionInterceptor 将消费者加入事务传播链中

恢复

入口类 org.mengyun.tcctransaction.recovery.QuartzRecoveryTask

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492969.html

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

相关文章

以京东为例,分析优惠价格叠加规则

一、平行优惠计算原则 1、什么是“平行式门槛计算规则”? 平行式门槛计算规则,即每一层级优惠都直接根据商品的单品基准价来计算是否符合门槛,店铺/平台促销、优惠券类优惠之间是并列关系,只要单品基准价或单品基准价总和&#x…

c++(类和对象中)

【本节目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 5. 赋值运算符重载 6. const成员函数 7. 取地址及const取地址操作符重载 目录 1、类的6个默认成员函数 2、构造函数 2.1概念 2.2特性 3.析构函数 3.1概念 3.2特性 4.拷贝构造函数…

Kafka生产者

一、生产者发送流程 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator,Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka …

网络应用基础 ——(2023新星计划文章二)

一,TCP/UDP报头 1.1TCP报文头部详解 Source port:源端口号与Destination port目标端口号: 在TCP(传输控制协议)协议中,源端口和目标端口字段用于标识通信会话的端点。 (1)源端口是一个16位字段…

LeetCode 1206. 实现跳表

不使用任何库函数,设计一个跳表。 跳表是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短,其设计思想与链表相似。 例如,一个跳表包…

3.数据查询(实验报告)

目录 一﹑实验目的 二﹑实验平台 三﹑实验内容和步骤 四﹑命令(代码)清单 五﹑调试和测试清单 一﹑实验目的 掌握使用Transact-SQL的SELECT语句进行基本查询的方法;掌握使用SELECT语句进行条件查询的方法;掌握SELECT语句的GROUP BY、ORDER BY以及UN…

MX6U根文件系统配置

编译 BusyBox 构建根文件系统 /home/ /linux/nfs mkdir rootfs tar -vxjf busybox-1.29.0.tar.bz2 依照自己的交叉编译 不然会出错 配置好 busybox 以后就可以编译了,我们可以指定编译结果的存放目录,我们肯定要将编 译结果存放到前面创建的 rootfs 目录…

(leetcode)66. 加一 67. 二进制求和(详解)

目录 66. 加一 思路 代码 67. 二进制求和 思路 代码 66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这…

7个最好的WordPress LMS在线学习管理系统比较

您是否正在为您的 WordPress 网站寻找最好的 LMS 在线学习管理系统插件? 学习管理系统 (LMS) 插件允许您创建和运行类似 Udemy 和 LearnDesk 等在线课程。一个完美的 WordPress LMS 插件拥有您管理在线课程、运行和评分测验、接受付款等所需的一切。 在本文中&…

【MySql】数据库 select 进阶

数据库 数据库表的设计ER 关系图三大范式 聚合函数与分组查询聚合函数 (count、sum、avg、max、min)分组查询 group by fields....having....(条件) 多表联查内连接外连接(左连接,右连接)自连接子查询合并查询 UNION 数据库表的设计 ER 关系…

在Centos中metabase安装与配置(bi工具)

1 metabase介绍 metabase是一款开源的BI分析工具,开发语言clojureReact为主、也有高阶的收费版。 官网:https://www.metabase.com/ 可以利用Metabase进行数据分析,数据可视化,报表生成等。开源地址:https://github.co…

(五)【平衡小车制作】位置式PID、直立环与速度环概念

声明:本博客是B站视频【天下行走的平衡小车视频】的笔记 一、PID控制算法概念 PID控制,即为对偏差进行比例、积分和微分控制。由三个元素构成:比例(P),积分(I),微分(D&…

Linux系统应用编程(六)Linux网络编程(下篇)

本篇主要内容: 一、Linux的文件描述符二、多路IO转接(上)1.基础版多路IO转接select▶ 关于select( )函数▶ select( )改写上篇案例 2.加强版多路IO转接poll3.顶配版多路IO转接epoll▶ epoll相关函数(1)创建监听红黑树&…

重装系统后,MySQL install错误,找不到dll文件,或者应用程序错误

文章目录 1.找不到某某dll文件2.mysqld.exe - 应用程序错误使用DX工具直接修复 1.找不到某某dll文件 由于找不到VCRUNTIME140_1.dll或者MSVCP120.dll,无法继续执行代码,重新安装程序可能会解决此问题。 在使用一台重装系统过的电脑,再次重新…

Yolov8实战:交通roadsign识别,通过加入CVPR203 DCNV3和BiLevelRoutingAttention,暴力涨点

1.roadsign数据集介绍 数据集大小:877张 类别:speedlimit、crosswalk、trafficlight、stop 2.基于YOLOV8的roadsign识别 2.1 原始yolov8性能分析 原始map为0.841 2.1 加入DCNV3 博客地址: https://cv2023.blog.csdn.net/article/detai…

手写 EventBus:从零到一实现自己的事件总线库

简介:在本文中,我们将详细介绍如何从头开始实现一个轻量级的 EventBus 库。我们将以 XEventBus 为例,阐述整个实现过程,以及在实现过程中遇到的关键问题和解决方法。 一 引言 什么是 EventBus? EventBus 是一个基于…

C++ 多线程编程(三) 获取线程的返回值——future

C11标准库增加了获取线程返回值的方法&#xff0c;头文件为<future>&#xff0c;主要包括future、promise、packaged_task、async四个类。 那么&#xff0c;了解一下各个类的构成以及功能。 1 future future是一个模板类&#xff0c;它是传输线程返回值&#xff08;也…

2-Lampiao百个靶机渗透(精写-思路为主)框架漏洞利用2

特别注明&#xff1a;本文章只用于学习交流&#xff0c;不可用来从事违法犯罪活动&#xff0c;如使用者用来从事违法犯罪行为&#xff0c;一切与作者无关。 文章目录 前言一、环境重新部署二、AWVSxray联动和xraybs联动1.安装AWVSxray2.让xray和bs先联动3.AWVS和xray联动 三、p…

【Spring框架全系列】如何创建一个SpringBoot项目

&#x1f307;哈喽&#xff0c;大家好&#xff0c;我是小浪。前几篇博客我们已经介绍了什么是Spring&#xff0c;以及如何创建一个Spring项目&#xff0c;OK&#xff0c;那么单单掌握Spring是完全不够的&#xff0c;Spring的家族体系十分强大&#xff0c;我们还需要深入学习&am…

力扣---LeetCode160. 相交链表(代码详解+流程图)

文章目录 前言160. 相交链表链接&#xff1a;思路&#xff1a;方法一&#xff1a;暴力求解法1.1 时间复杂度&#xff1a;O(M*N)1.2 代码&#xff1a; 方法二&#xff1a;双指针2.1 时间复杂度&#xff1a;O(N)2.2 代码&#xff1a;2. 3流程图&#xff1a; 注意&#xff1a;补充…