一、AT模式开发实战
1)准备阶段

2)启动阶段

2)正常提交

3)异常回滚


4)undo_log






before_image

after_image

放开断点

库存跟before_image一致
5)执行流程






二、TCC模式开发实战
1)准备阶段


2)配置多数据源


3)正常提交

4)异常回滚

5)执行流程


通过接口中注解管理后续的二阶段提交和回滚

TCC和AT的区别是需要我们自定义二阶段commit和rollback逻辑
三、Seata AT模式源码解析(Client端)
1)概述

TC主要在Server端,通过Netty进行通讯

2)事务日志rollback_info内容解析


TableRecords

TableMeta










Row

Field


3)事务日志管理器UndoLogManager





4)Seata数据源代理

4.1)DataSourceProxy数据源代理类


没做什么事,主要针对构造方法注入的targetDataSource进行操作



DefaultResourceManager

日常开发表元数据信息配置在properties配置文件中除非更新版本不会变,如果配到配置中心就有机会被改变

4.2)ResourceManager资源管理器(RM)



不开启全局锁可能出现分布式事务过程中数据被其他服务修改,但是效率高

DefaultResourceManager,默认BranchType为AT模式






Seata的jar包

EnhancedServiceLoader通过ResourceManager.class找到此文件获取对应实现类


通过Netty将资源向TC注册
4.3)ConnectionProxy连接代理器类



步骤a:LOCK_RETRY_POLICY.execute()





步骤b:doCommit()——分支事务提交


、
register()


向TC注册分支成功后返回分支Id

将返回的分支Id存储在ConnectionContext中
flushUndoLogs()


步骤2

步骤2

步骤3

步骤3







report()


步骤b:doCommit()——本地事务提交并查询全局锁






步骤c:rollback()

4.4)StatementProxy和PrepareStatementProxy




AbstractStatementProxy

StatementProxy

ExecuteTemplate



SQLRecognizers

通过dbType选择不同数据库,通过sqlType确定Delete、Insert、Select、Update



ExecuteTemplate

ExecuteTemplate
Executor







生成前镜像

默认ONLY_CARE_UPDATE_COLUMNS为true,一般只查更新了的列


5)AT模式的两阶段提交
5.1)一阶段处理


5.2)二阶段的提交处理



addToCommitQueue(context)一般都是先返回二阶段提交状态,接下来再异步删除UndoLog
5.3)二阶段的回滚处理








