美文网首页
seata的原理

seata的原理

作者: hangjun | 来源:发表于2022-02-20 13:17 被阅读0次

    整体机制
    两阶段提交协议的演变:

    一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
    二阶段:提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。

    AT模式
    一阶段:
    1.tm开启一个全局事务,seata服务器返回xid
    2.执行第一个本地事务(2.1前置镜像 2.2执行sql 2.3后置镜像),注册分支事务
    3.feign调用第二个本地事务(3.1前置镜像 3.2执行sql 3.3后置镜像),注册分支事务

    二阶段:
    1.没有异常的情况,tm全局提交到tc,tc删除全局事务、分支事务
    2.有异常的情况下,tm全局提交到tc,tc删除全局事务、分支事务,通知各个rm进行回滚操作

    代码层面:
    1.@SeataAutoConfiguration 和@GlobalTransitionAutoConfiguration
    会注册一个BeanPostProcessor,名字是:GlobalTransactionScanner。
    2.GlobalTransactionScanner.afterProperties()会初始化rm,tm,异步开启注册请求、重试请求、接受数据的线程池
    3.GlobalTransactionScanner.wrapIfxxx()方法在生成动态代理对象的的时候会增加一个GlobalTransactionInterceptor.
    这个类内部调用一个TransactionTemplate的模板类,模板类提供创建全局事务、创建分支事务、执行业务逻辑处理、提交、回滚

    前置镜像和后置镜像还有注册分支事务都是通过代理datasource得到一个datasourceProxy里面处理的。

    相关文章

      网友评论

          本文标题:seata的原理

          本文链接:https://www.haomeiwen.com/subject/tgqplrtx.html