Seat 重要流程分析如下:

1.启动seata-server,调用defalutcoordinator, 执行全局提交,去数据库根据

去数据库根据xid查询globalTable表获取全局事务对象

 

2。建立globalSession=SessionHolder.findGlobalSession,然后拿到globalSession.lockAndExcute

锁去执行。

 

3,执行如下流程:

seata server 源码分析下

 

 

4.释放全局锁,其他的分布式事务可以来锁定资源,说白了就是把Lock_table关于本次涉及的行锁记录全部删除

判断是有TCC分支,如果有同步提交

如果没有进行异步提交。

seata server 源码分析下

 

5.执行异步提交:

执行线程池的异步提交:

从全局事务获取所有的分支事务,判断分支事务的第一阶段的状态是否为提交失败状态,

如果是:调用globalSession.removeBranch(branchSession);

如果否:回调用分支事务(微服务二阶段提交)

分支微服务二阶段提交的结果状态,去判断全局状态:判断流程如下:

seata server 源码分析下

6.缺省条件下执行

seata server 源码分析下

 

7.循环执行线程池,启动定时任务,retryCommitting定时任务,handleRetryCommitting,循环到doGlobalCommit

 

 

相关文章:

  • 2021-09-17
  • 2021-12-10
  • 2021-07-13
  • 2021-07-07
  • 2021-11-27
  • 2021-09-13
  • 2021-04-09
猜你喜欢
  • 2022-12-23
  • 2021-06-15
  • 2021-08-29
  • 2022-12-23
  • 2021-11-28
  • 2021-07-05
  • 2021-06-16
相关资源
相似解决方案