Seata(二)

一、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)二阶段的回滚处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容