seata server 源码分析下

Seat 重要流程分析如下:

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

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

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

锁去执行。

3,执行如下流程:

扫描二维码关注公众号,回复: 9715201 查看本文章

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

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

如果没有进行异步提交。

5.执行异步提交:

执行线程池的异步提交:

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

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

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

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

6.缺省条件下执行

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

发布了595 篇原创文章 · 获赞 11 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/xiamaocheng/article/details/104615402
今日推荐