当前位置: 首页 > news >正文

Seata服务端开启事务核心源码解析

文章目录

  • 概述
  • 一、doGlobalBegin
    • 1.1、createGlobalSession
    • 1.2、addSessionLifecycleListener
    • 1.3、begin


概述

  Seata服务端作为TC角色,用于接收客户端标注了@GlobalTransactional也就是TM角色的开启事务,提交/回滚事务请求,维护全局和分支事务的状态,并驱动客户端的RM角色真正地去执行开启事务,提交/回滚事务操作
  服务端与客户端交互的类,是AbstractTCInboundHandler
在这里插入图片描述
在这里插入图片描述
  在TCInboundHandler顶级接口中,定义了开启,提交/回滚事务的统一处理模板,接收客户端的请求:
在这里插入图片描述
  AbstractTCInboundHandler重写了各自的handle方法,加入了自己的处理逻辑,实际上也是委托子类DefaultCoordinator去完成具体的逻辑的。
在这里插入图片描述

一、doGlobalBegin

  doGlobalBegin是Seata服务端处理TM开启全局事务请求的方法:
在这里插入图片描述
  调用到了DefaultCorebegin方法:

  1. 创建一个GlobalSession对象,表示当前全局事务的上下文。(GlobalSession是Seata中用于管理一个全局事务生命周期的核心对象。)
  2. 将 XID 放入日志上下文。
  3. 注册一个监听器,用于监听事务开始、结束、提交、回滚等生命周期事件。
  4. 正式启动事务,记录开始时间、生成 XID、持久化到存储(例如写入文件或数据库)。
  5. 向客户端返回 XID,客户端后续注册分支事务、提交、回滚时会携带它。

在这里插入图片描述

1.1、createGlobalSession

  最终会调用到GlobalSession,主要是给GlobalSession的一些属性赋值,同时XID就是在这一步生成的。
在这里插入图片描述

1.2、addSessionLifecycleListener

  主要是向lifecycleListeners集合中添加监听器。
在这里插入图片描述
  SessionManagerSessionLifecycleListener的子类,定义了不同时机被触发的事件的模板,具体的实现有数据库、文件、Redis。
在这里插入图片描述

1.3、begin

  在begin方法中,首先会记录当前的状态为开始,同时记录开始时间,后续判断超时。然后会调用监听器的onBegin方法(onBegin方法是SessionManager父类的)
在这里插入图片描述
  选择DataBaseSessionManageraddGlobalSession实现:
在这里插入图片描述
  该方法的作用是,把事务会话持久化到数据库中。首先会判断taskName是否为空,当 Seata 正常处理事务时,taskName 是空的。如果是异步任务/重试任务,taskName 不为空
在这里插入图片描述
  然后会根据不同的操作类型,执行不同的数据库操作:
在这里插入图片描述
  以insertGlobalTransactionDO为例,根据当前数据库类型和表名,获取SQL:
在这里插入图片描述

在这里插入图片描述
  事务开启时,向global_table中初始化一条数据,执行如下的SQL

insert into global_table (xid,transaction_id,status,application_id,transaction_service_group,transaction_name,timeout,
begin_time,application_data,gmt_create,gmt_modified) values (?, ?, ?, ?, ?, ?, ?, ?, ?, now(), now())

http://www.xdnf.cn/news/250237.html

相关文章:

  • 位运算题目:寻找重复数
  • 最长公共前缀(14)
  • 基于Koa实现的服务端渲染 ✅
  • 8.进程概念(四)
  • 为什么大模型偏爱Markdown
  • 操作系统(1)多线程
  • 【Machine Learning Q and AI 读书笔记】- 03 小样本学习
  • 数字智慧方案6178丨智慧医院医疗信息化建设之以评促建(61页PPT)(文末有下载方式)
  • 微型计算机串行通信实验三全解析:从原理到实践的探索之旅
  • 《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》章节思维导图
  • 【验证技能】文档要求和好文档注意点
  • Python实现简易博客系统
  • Linux——线程(3)线程同步
  • ✨从噪声到奇迹:扩散模型如何“想象“出世界
  • 本地服务器备份网站数据,本地服务器备份网站的操作步骤
  • 产品手册小程序开发制作方案
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 17)
  • python自动化测试
  • 【业务领域】计算机网络基础知识
  • 基于预计技术研究加速因子:原理、应用场景及模型验证
  • socket-IO复用技术
  • 米酒的功能和优缺点
  • 范围for 和 万能引用
  • 【业务领域】电脑网卡是主板还是cpu(主板的网卡是什么意思)
  • 神经网络入门
  • 题解:CF1133E K Balanced Teams
  • 专题二十一:无线局域网——WLAN
  • VAO与VBO的相关操作
  • 【软件技能】Verdi使用技巧总结
  • TactileNet 利用 AI 生成触觉图形填补视障人士无障碍鸿沟