服务端实现,都在DefaultCoordinator,实质上是调用defaultCore的方法
1.首先创建全局globalSession,并且增加对应的监听器
2.session.begin(); 开启session
3.通过eventBus 下发globalTransaction 事件
4.返回全局事务的xid
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
全局提交 globalCommit,本质为调用defaultCore的commit方法
1.首先获取globalSession,添加对应的listener
2.调用lockAndExecute ,锁住globalSession,并且执行
3.把globalSession close关闭并且clean清理,这样别的事务分支就不能注册上来;如果当前状态是begin,那么就修改全局事务globalSession的状态为commiting 提交中
4.如果判断全局事务可以异步提交,就异步提交,否则就直接调用doGlobalCommit同步提交
AT 模式,就是异步提交; TCC 模式,就是同步提交(netty的channel发送给tc)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
对于第二阶段的rollBack回滚方法
那么二阶段的回滚调用是同步进行的,一旦同步回滚失败才会进入异步重试阶段;整体实现过程同上
构造request,通过channel发送,并且获取返回结果result
1.对于rollback结果,如果是PhaseTwo_Rollbacked,就删除对应的分支
2.如果是PhaseTwo_RollbackFailed_Unretryable,就对回滚过程终止,然后直接return
3.其他情况,就加入到本地内存,异步任务进行重试
4.然后调用endRollbacked 终止回滚流程
5.最后eventBus下发回滚完成事件