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

社保网站做员工用工备案吗整站排名优化公司

社保网站做员工用工备案吗,整站排名优化公司,厚街商城网站建设,网站设计多少钱一个文章目录 前言一、doGlobalCommit(同步提交)2.1、closeAndClean()2.2、changeGlobalStatus2.3、doGlobalCommit2.3.1、findGlobalSession 总结 前言 本篇介绍Seata服务端TC如何驱动RM提交事务。 一、doGlobalCommit(同步提交) doG…

文章目录

  • 前言
  • 一、doGlobalCommit(同步提交)
    • 2.1、closeAndClean()
    • 2.2、changeGlobalStatus
    • 2.3、doGlobalCommit
      • 2.3.1、findGlobalSession
  • 总结


前言

  本篇介绍Seata服务端TC如何驱动RM提交事务。


一、doGlobalCommit(同步提交)

  doGlobalCommit是提交事务的方法:
在这里插入图片描述
  首先会根据客户端传递的XID,查找是否存在全局事务,如果不存在,就直接返回客户端Finished,同样地,如果超时,直接返回给客户端TimeoutRollbacking
在这里插入图片描述
  添加一个监听器,然后利用SessionManager执行lambda表达式中的逻辑:

  • 如果全局事务的状态非Begin,直接返回false。
  • 如果全局事务的状态Begin
    • 关闭事务,释放全局锁
    • 驱动所有的RM提交事务,还要考虑到支持异步提交的场景。
      在这里插入图片描述

2.1、closeAndClean()

  closeAndClean的作用是释放全局锁,如果是AT模式,还需要执行clean的方法:
在这里插入图片描述
在这里插入图片描述
选择数据库的实现

  最终会释放锁 删除lock_table的记录:
在这里插入图片描述
在这里插入图片描述
  根据客户端发送的XID删除,最终会执行如下的SQL:

delete from lock_table where xid = ? ;

2.2、changeGlobalStatus

  同步提交的情况下:
在这里插入图片描述
  最终会走到DataBaseTransactionStoreManagerwriteSessionupdate分支:
在这里插入图片描述

在这里插入图片描述
  **执行如下的sql,更新global_table 的状态为2 **

update global_table set status = ?,gmt_modified = now() where xid = ?;

  commit在同步提交的情况下,会走到doGlobalCommit分支:
在这里插入图片描述

2.3、doGlobalCommit

  在doGlobalCommit方法中,首先会判断,如果当前的模式是SAGA,则走SAGA的这一部分逻辑。否则就是其他模式的提交
在这里插入图片描述
  首先会执行globalSession.getSortedBranches()方法,获取所有的分支事务信息:
在这里插入图片描述
  转换了一下源码中的写法,更加清晰易懂一点。
在这里插入图片描述

2.3.1、findGlobalSession

  最终会调用到DataBaseTransactionStoreManagerreadSession
在这里插入图片描述
  底层实际上是执行了两条SQL:

-- 查询的是global_table 表中所有的字段,简化成了*
select * from global_table where xid = ?";
-- 查询分支事务表,查出某个主线事务下的所有分支事务
select * from branch_table where xid = 上一条sql查询结果中的xid(主线事务的XID) order by gmt_create asc

  最终将当前主线事务下的分支事务,加到branchSessions集合中:

在这里插入图片描述

  在最外层SessionHelper#forEach中,会去遍历所有的分支事务,
在这里插入图片描述
  得到当前XID下的所有分支事务后,遍历所有的分支事务,执行lambda表达式中的内容
  如果分支在第一阶段就失败了,说明这个分支没有成功参与事务,因此可以将其从全局事务中移除,并继续下一个。PhaseOne_Failed的状态,是TC 已记录了这个分支(即注册成功),但分支主动上报自己第一阶段失败的结果,如果是因为RM业务发生了异常,则Spring 事务机制自动回滚,Seata 也不会写 undo log,也不会向 TC 汇报任何分支

  在branchCommit方法中,TC会驱动每一个RM去提交事务,然后根据RM返回的状态去判断

在这里插入图片描述

  • 如果返回的是PhaseTwo_Committed两阶段提交成功,则执行removeBranch,主要是删除该分支在lock_table的记录,并且删除branch_table的记录,清理branchSessions

在这里插入图片描述

  • 如果返回的是PhaseTwo_CommitFailed_Unretryable两阶段提交失败并且无法重试,则将整个全局事务标记为提交失败(Finished + 状态为 CommitFailed),并将其从内存事务会话中清理掉。

在这里插入图片描述

  最后会进行全局事务的最终处理,删除全局事务信息。
在这里插入图片描述

总结

  Seata 服务端在同步提交全局事务的过程中,主要完成了以下工作:

  • 释放锁,删除lock_table的记录。
  • global_table表中的状态改为2。
  • 遍历并驱动所有的分支事务提交(Phase Two 提交),每个分支由 TC 向对应的 RM 发起提交请求。
  • 根据各分支事务返回的状态进行处理:
    • 若分支返回 PhaseTwo_Committed,表示该分支已成功提交,TC 会调用 removeBranch 方法:清理内存中的 branchSession,并删除该分支在 branch_tablelock_table 中的记录。
    • 若分支返回 PhaseTwo_CommitFailed_Unretryable,表示分支提交失败且不可重试,TC 会将全局事务状态设置为 CommitFailed(属于结束状态),并清理内存中的全局事务会话。
  • 所有分支提交完成后,TC 会将 global_table 中该全局事务的状态更新为 Committed(提交成功)或 CommitFailed(提交失败)。
  • 如果全局事务已完成且所有资源已释放,TC 会清理 global_table 中对应事务的记录,以完成整个分布式事务的生命周期管理。
http://www.dtcms.com/wzjs/188964.html

相关文章:

  • 自己如何创建网站快速提高排名
  • 网站建设合同 完整版厦门排名推广
  • 网站建设费会计科目我是做推广的怎么找客户
  • dreamweaver8可以做资源下载网站网站可以自己建立吗
  • 做网站用笔记本做服务器吗seo官网
  • 网站开发进修优化课程设置
  • 企业做网站需要多少钱优秀软文范例200字
  • 做渐变色的网站最新热搜新闻事件
  • 网站策划书案例展示磁力猫引擎
  • 美妆网站建设规划app广告投放价格表
  • 商业网站怎么做网站推广的全过程
  • 网站建设评审会的通知友情链接大全
  • 成都正规搜索引擎优化快速将网站seo
  • 林州网站建设熊掌号天天seo百度点击器
  • 做网站好看的旅行背景图片最新热搜新闻
  • 长沙网站推广外贸网站推广软件
  • ps网站主页按钮怎么做关键词优化seo排名
  • 站长之家下载怎么在百度推广自己的网站
  • 自己做微网站网络营销与传统营销的区别
  • 宾馆网站制作网站开发教程
  • 百度做的网站能优化吗crm系统成功案例分享ppt
  • shopify可以用来做B2B网站吗廊坊百度提升优化
  • 国外可以做自媒体的网站设计培训学院
  • 江阴市做网站的外贸谷歌推广
  • 哈尔滨专业网站制作设计线下引流的八种推广方式
  • php做网站项目的流程寄生虫seo教程
  • ims2009 asp企业网站建设怎么设置自己的网站
  • 郑州企业型网站建设seo推广优化多少钱
  • 成都医院手机网站建设南昌seo营销
  • 网站域名备案和做网站关键词排名推广软件