首页 > 编程语言 >Seata 源码

Seata 源码

时间:2025-01-20 10:56:14浏览次数:1  
标签:回滚 Seata ResourceManager 事务 接口 GlobalTransaction 源码 方法

作者:京东物流 张士欣

核心接口和类

ResourceManager

ResourceManager 是 seata 的重要组件之一,RM 负责管理分支数据资源的事务。

 

 

AbstractResourceManager 实现 ResourceManager 提供模板方法。DefaultResourceManager 适配所有的 ResourceManager,所有方法调用都委派给对应负责的 ResourceManager 处理。

 

 

DataSourceManager

此为 AT 模式核心管理器,DataSourceManager 继承 AbstractResourceManager,管理数据库 Resouce 的注册,提交以及回滚等。

 

 

AsyncWorker

DataSourceManager 事务提交委派给 AsyncWorker 进行提交的,因为都成功了,无需回滚成功的数据,只需要删除生成的操作日志就行,采用异步方式,提高效率。


io.seata.rm.datasource.AsyncWorker#doBranchCommits
UndoLogManagerFactory.getUndoLogManager(dataSourceProxy.getDbType()).batchDeleteUndoLog(xids, branchIds, conn);

UndoLogManager

 

 

TransactionManager

 

 

DefaultTransactionManager

TransactionManagerHolder 为创建单例 TransactionManager 的工厂,可以使用 EnhancedServiceLoader 的 spi 机制加载自定义的类,默认为DefaultTransactionManager。

 

 

GlobalTransaction

GlobalTransaction 接口提供给用户开启事务,提交,回滚,获取状态等方法。

 

 

DefaultGlobalTransaction

DefaultGlobalTransaction 是 GlobalTransaction 接口的默认实现,它持有 TransactionManager 对象,默认开启事务超时时间为 60 秒,默认名称为 default,因为调用者的业务方法可能多重嵌套创建多个 GlobalTransaction 对象开启事务方法,因此 GlobalTransaction 有 GlobalTransactionRole 角色属性,只有Launcher 角色的才有开启、提交、回滚事务的权利。

GlobalTransactionContext

GlobalTransactionContext 为操作 GlobalTransaction 的工具类,提供创建新的 GlobalTransaction,获取当前线程有的 GlobalTransaction 等方法。

GlobalTransactionScanner

GlobalTransactionScanner 继承 AbstractAutoProxyCreator 类,即实现了 SmartInstantiationAwareBeanPostProcessor 接口,会在 spring 容器启动初始化bean 的时候,对 bean 进行代理操作。wrapIfNecessary 为继承父类代理 bean 的核心方法,如果配置了 service.disableGlobalTransaction 为 false 属性则注解不生效直接返回,否则对 GlobalTransactional 或 GlobalLock 的方法进行拦截代理。

GlobalTransactionalInterceptor

GlobalTransactionalInterceptor 实现 aop 的 MethodInterceptor 接口,对有 @GlobalTransactional 或 GlobalLock 注解的方法进行代理。

TransactionalTemplate

TransactionalTemplate 模板类提供了一个开启事务,执行业务,成功提交和失败回滚的模板方法 execute(TransactionalExecutor business)。


try {
    // 2. If the tx role is 'GlobalTransactionRole.Launcher', send the request of beginTransaction to TC,
    //    else do nothing. Of course, the hooks will still be triggered.
    beginTransaction(txInfo, tx);

    Object rs;
    try {
        // Do Your Business
        rs = business.execute();
    } catch (Throwable ex) {
        // 3. The needed business exception to rollback.
        completeTransactionAfterThrowing(txInfo, tx, ex);
        throw ex;
    }

    // 4. everything is fine, commit.
    commitTransaction(tx);

    return rs;
} finally {
    //5. clear
    resumeGlobalLockConfig(previousConfig);
    triggerAfterCompletion();
    cleanUp();
}

Resource

Resource 能被 ResourceManager 管理并且能够关联 GlobalTransaction。

 

 

DataSourceProxy

DataSourceProxy 实现 Resource 接口,BranchType 为 AT 自动模式。它继承 AbstractDataSourceProxy 代理类,所有的 DataSource 相关的方法调用传入的targetDataSource 代理类的方法,除了创建 connection 方法为创建 ConnectionProxy 代理类。对象初始化时获取连接的 jdbcUrl 作为 resourceId,并注册至DefaultResourceManager 进行管理。同时还提供获取原始连接不被代理的 getPlainConnection 方法。

ExecuteTemplate

ExecuteTemplate 为具体 statement 的 execute,executeQuery 和 executeUpdate 执行提供模板方法。

Executor

 

 

SQLRecognizer

SQLRecognizer 识别 sql 类型,获取表名,表别名以及原生 sql

UndoExecutorFactory

UndoExecutorFactory 根据 sqlType 生成对应的 AbstractUndoExecutor。

UndoExecutor 为生成执行 undoSql 的核心。如果全局事务回滚,它会根据 beforeImage 和 afterImage 以及 sql 类型生成对应的反向 sql 执行回滚数据,并添加脏数据校验机制,使回滚数据更加可靠。

DefaultCoordinator

DefaultCoordinator 即为 TC,全局事务默认的事务协调器。它继承 AbstractTCInboundHandler 接口,为 TC 接收 RM 和 TM 的 request 请求数据,是进行相应处理的处理器。实现 TransactionMessageHandler 接口,去处理收到的 RPC 信息。实现 ResourceManagerInbound 接口,发送至 RM 的 branchCommit,branchRollback 请求。

 

 

 

 

Core

Core 接口为 seata 处理全局事务协调器 TC 的核心处理器,它继承 ResourceManagerOutbound 接口,接受来自 RM 的 rpc 网络请求 (branchRegister,branchReport,lockQuery)。同时继承 TransactionManager 接口,接受来自 TM 的 rpc 网络请求(begin, commit,rollback,getStatus),另外提供提供 3 个接口方法。

 

 

GlobalSession

GlobalSession 是 seata 协调器 DefaultCoordinator 管理维护的重要部件,当用户开启全局分布式事务,TM 调用 begin 方法请求至 TC,TC 则创建GlobalSession 实例对象,返回唯一的 xid。它实现 SessionLifecycle 接口,提供 begin,changeStatus,changeBranchStatus,addBranch,removeBranch 等操作 session 和 branchSession 的方法。

BranchSession

BranchSession 为分支 session,管理分支数据,受 globalSession 统一调度管理,它的 lock 和 unlock 方法由 lockManger 实现。

LockManager

DefaultLockManager 是 LockManager 的默认实现,它获取 branchSession 的 lockKey,转换成 List,委派 Locker 进行处理。

Locker

Locker 接口提供根据行数据获取锁,释放锁,是否锁住和清除所有锁的方法。

标签:回滚,Seata,ResourceManager,事务,接口,GlobalTransaction,源码,方法
From: https://www.cnblogs.com/Jcloud/p/18680904

相关文章

  • 【一看就会】Autoware.universe的“规划”部分源码梳理【六】(behavior_path_planner第
    文章目录前言六、避障变道模块——autoware_behavior_path_avoidance_by_lane_change_module文件功能主次关系功能依赖说明核心文件-scene.cpp主要执行流程1.检查阶段2.数据更新阶段3.规划阶段辅助计算函数数据流向源码注释管理文件-manager.c......
  • 基于单片机自动售货机系统设计(论文+源码)
    1系统方案设计本设计自动售货机系统的系统架构设计如图所示,其采用STM32F103单片机作为控制器,结合ESP8266WiFi通信模块、SG90舵机、OLED液晶、按键、LED灯等构成整个系统。用户在使用时,可以通过按键选择相应的商品(可乐、雪碧、水),并进行投币(1元、5元、10元),当确认购买后舵机转......
  • UE学习日志#3 GAS--ASC源码简要分析1
    嘿我跟您说这坑一点也不大,AbilitySystemComponent.h也就两千行,.cpp也就三千多,乐凡事要一点点来,我也就按每天的进度分p了。1类的继承关系和修饰符先看这两行,为了方便看我加了换行UCLASS(ClassGroup=AbilitySystem,hidecategories=(Object,LOD,Lighting,Transform,Sockets......
  • 【SLAM】扩展卡尔曼滤波器机器人SLAM滤波跟踪(维多利亚公园为基准,地标是激光扫描仪探测
    ......
  • 【潮流计算】牛顿拉夫逊法解潮流【含GUI Matlab源码 11034期】
    ......
  • 如何安全且高效地修改网站源码?
    网站源码的修改是网站开发和维护中常见的任务,但其难度和复杂性因项目规模和技术栈的不同而有所差异。本文将探讨如何安全且高效地进行网站源码修改,确保项目顺利推进。答案:为了安全且高效地修改网站源码,建议遵循以下步骤:理解现有架构:在开始修改之前,务必深入了解当前项目的架构......
  • 2025毕设springboot 基于web的家教管理系统论文+源码
    系统程序文件列表开题报告内容研究背景在当今社会,随着教育需求的多元化和个性化发展,家教服务逐渐成为众多家庭补充学校教育、提升孩子学习成绩的重要途径。然而,传统的家教市场存在信息不对称、管理不规范、服务质量参差不齐等问题,给家长和家教老师带来了诸多不便。随着互联......
  • 2025毕设springboot 基于Web的多功能游戏平台设计与实现论文+源码
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和普及,网络游戏已成为人们休闲娱乐的重要方式之一。传统的游戏平台大多局限于单一的游戏类型或服务商,无法满足用户多样化的游戏需求。与此同时,随着Web技术的不断进步,基于Web的游戏平台凭借其跨平台、易访问、......
  • 基于微信小程序的优购电商系统设计与实现(LW+源码+讲解)
    专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。主要内容:免费功能设计、开题报告、任务书、中......
  • SSM在线仓储管理系统-毕业设计源码96366
    摘要本文介绍了一个基于SSM框架的在线仓储管理系统的设计与实现。该系统旨在提供一个便捷、高效的仓储管理平台,帮助企业实现对库存、出入库等仓储操作的自动化管理。在线仓储管理系统具有以下主要功能:用户登录与权限控制、库存管理、出入库管理、订单管理等。通过该系统,企......