上文我们分析了fescar的一阶段执行过程。在一阶段中,服务起始方发起全局事务并注册到TC。在调用协同服务时,协同服务的事务分支事务会先完成阶段一的事务提交或回滚,并生成事务回滚的undo_log日志,同时上报其事务状态。出现任何异常都会通知TC,TC会通知各个一阶段已提交的事物通过undo_log发起回滚。如果没有异常即可提交事务。

现在我们了解下事务的提交和回滚。

事务提交

fescar通过netty进行服务之间的通信。上文我们说过,无论是提交还是回滚,本质都是发起一次请求到TC。TC在接收到请求后悔分发到com.alibaba.fescar.rm.AbstractRMHandler完成相应的逻辑。下图是相应的请求链

在com.alibaba.fescar.rm.datasource.DataSourceManager#branchCommit中fescar完成了相应的全局事务提交,这里DataSourceManager委托给asyncWorker去实现相应逻辑,asyncWorker是一个异步线程池

我们看下asyncWorker的分支提交代码

1.asyncWorker首先会把分支提交包装成一个二阶段的上下文,并添加到任务数组中

2.定时的去遍历任务数组,删除各个分支事务的undolog。注意这里并没有拿到代理DataSourceProxy。

引用一张官方的流程图

事务回滚

回到DatasourceManage,我们看com.alibaba.fescar.rm.datasource.DataSourceManager#branchRollback这个方法

实际的逻辑是在com.alibaba.fescar.rm.datasource.undo.UndoLogManager#undo中,很明显undo要做的事情就是去执行一阶段生成的undolog进行回滚

最后引用一张官方流程图


fescar的流程分析就告一段落了。其实还有很多的细节需要去完善,例如fescar对异常的处理,undo_log的拼接和执行等。fescar现在改名seata,下个版本将会执行HA,还是很期待它的第一个生产版本。通过本次源码的分析。对于feacar将整个jdbc中的Datasouce,Connnection,Statement三大组件进行了重写的思路感到大开眼界,自己也写了小demo,这次确实学到了好多东西!感谢fescar的开源

Fescar(Seata)-Springcloud流程分析-2阶段的更多相关文章

  1. Fescar(Seata)-Springcloud流程分析-1阶段

    Fescar是阿里18年开源的分布式事务的框架.Fescar的开源对分布式事务框架领域影响很大.作为开源大户,Fescar来自阿里的GTS,经历了好几次双十一的考验,一经开源便颇受关注.今天就来看了F ...

  2. python 带参与不带参装饰器的使用与流程分析/什么是装饰器/装饰器使用注意事项

    一.什么是装饰器 装饰器是用来给函数动态的添加功能的一种技术,属于一种语法糖.通俗一点讲就是:在不会影响原有函数的功能基础上,在原有函数的执行过程中额外的添加上另外一段处理逻辑 二.装饰器功能实现的技 ...

  3. MSM8909中LK阶段LCM屏适配与显示流程分析(二)

    1.前言 在前面的文章MSM8909中LK阶段LCM屏适配与显示流程分析(一),链接如下: https://www.cnblogs.com/Cqlismy/p/12019317.html 介绍了如何使 ...

  4. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_01-用户认证-用户认证流程分析

    1 用户认证 1.1 用户认证流程分析 用户认证流程如下: 访问下面的资源需要携带身份令牌和jwt令牌,客户端可以通过身份认证的令牌从服务端拿到长令牌, 一会要实现认证服务请求用户中心从数据库内来查询 ...

  5. u-boot 流程分析

    u-boot 介绍: 对于计算机来说 , 从一开始上机通电是无法直接启动操作系统的 , 这中间需要一个引导过程 , 嵌入式Linux系统同样离不开引导程序 ,  这个启动程序就叫启动加载程序(Boot ...

  6. thttpd和cgilua安装与运行流程分析

    安装 参考如下博文安装thttpd软件 http://blog.csdn.net/21aspnet/article/details/7045845 http://blog.csdn.net/drago ...

  7. u-boot启动流程分析(2)_板级(board)部分

    转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...

  8. SQL Server中CURD语句的锁流程分析

    我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...

  9. MapReduce运行流程分析

    研究MapReduce已经有一段时间了.起初是从分析WordCount程序开始,后来开始阅读Hadoop源码,自认为已经看清MapReduce的运行流程.现在把自己的理解贴出来,与大家分享,欢迎纠错. ...

随机推荐

  1. proxy.go 源码阅读

    )     for {         select {         case <-otherSide:             complete <- true            ...

  2. NOIP2013华容道 大爆搜

    预处理出每个点周围四个点互相到达的最短路,再在整个图上跑SPFA,要记录路径 #include<cstdio> #include<cstring> #include<io ...

  3. 使用ASIFormDataRequest完成用户的登录操作

    ASIFormDataRequest是用于向表单post数据或get数据,可以用于用户向服务器端发送请求完成登录注册,上传下载数据的操作. 之前写过一篇文章是介绍使用ios内置的功能完成登录操作(NS ...

  4. ll 和 ls -l的详解

    ll会列出该文件下的所有文件信息,包括隐藏文件 而ls -l 只会列出显示文件 ll 命令列出的信息更加详细,有时间,是否可读写等信息 ll命令和ls -l命令结果区别: 上面结果说明: 各个字段的含 ...

  5. 【毕业原版】-《贝德福特大学毕业证书》Bedfordhire一模一样原件

    ☞贝德福特大学毕业证书[微/Q:865121257◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...

  6. Robot Framework 源码解析(1) - java入口点

    一直很好奇Robot Framework 是如何通过关键字驱动进行测试的,好奇它是如何支持那么多库的,好奇它是如何完成截图的.所以就打算研究一下它的源码. 这是官方给出的Robot framework ...

  7. Java 12 正式发布,8大新特性

    自 2 月 7 日开始,Java/JDK 12 就进入了 RC 阶段.按照发布周期,美国当地时间 3 月 19 日,也就是北京时间 20 号 Java 12 正式发布了! 1.Shenandoah:低 ...

  8. Hadoop大数据部署

    Hadoop大数据部署 一. 系统环境配置: 1. 关闭防火墙,selinux 关闭防火墙: systemctl stop firewalld systemctl disable firewalld ...

  9. Bumblebee之负载、限流和故障处理实践

    Bumblebee作为标准HTTP 1.1应用协议的网关,它能作为任何基于HTTP 1.1构建Webapi服务的前置网关.以下通过示例讲述如何用Bumblebee来制作一个asp.net core w ...

  10. 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署

    这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...