Seata(二)

一、AT模式開發(fā)實戰(zhàn)

1)準(zhǔn)備階段

2)啟動階段

2)正常提交

3)異?;貪L

4)undo_log

before_image
after_image
放開斷點
庫存跟before_image一致

5)執(zhí)行流程

二、TCC模式開發(fā)實戰(zhàn)

1)準(zhǔn)備階段

2)配置多數(shù)據(jù)源

3)正常提交

4)異常回滾

5)執(zhí)行流程

通過接口中注解管理后續(xù)的二階段提交和回滾
TCC和AT的區(qū)別是需要我們自定義二階段commit和rollback邏輯

三、Seata AT模式源碼解析(Client端)

1)概述

TC主要在Server端,通過Netty進(jìn)行通訊

2)事務(wù)日志rollback_info內(nèi)容解析

TableRecords

TableMeta

Row

Field

3)事務(wù)日志管理器UndoLogManager

4)Seata數(shù)據(jù)源代理

4.1)DataSourceProxy數(shù)據(jù)源代理類

沒做什么事,主要針對構(gòu)造方法注入的targetDataSource進(jìn)行操作
DefaultResourceManager
日常開發(fā)表元數(shù)據(jù)信息配置在properties配置文件中除非更新版本不會變,如果配到配置中心就有機會被改變

4.2)ResourceManager資源管理器(RM)

不開啟全局鎖可能出現(xiàn)分布式事務(wù)過程中數(shù)據(jù)被其他服務(wù)修改,但是效率高
DefaultResourceManager,默認(rèn)BranchType為AT模式
Seata的jar包
EnhancedServiceLoader通過ResourceManager.class找到此文件獲取對應(yīng)實現(xiàn)類
通過Netty將資源向TC注冊

4.3)ConnectionProxy連接代理器類

步驟a:LOCK_RETRY_POLICY.execute()

步驟b:doCommit()——分支事務(wù)提交

、

register()

向TC注冊分支成功后返回分支Id
將返回的分支Id存儲在ConnectionContext中

flushUndoLogs()

步驟2
步驟2
步驟3
步驟3

report()

步驟b:doCommit()——本地事務(wù)提交并查詢?nèi)宙i

步驟c:rollback()

4.4)StatementProxy和PrepareStatementProxy

AbstractStatementProxy
StatementProxy
ExecuteTemplate

SQLRecognizers

通過dbType選擇不同數(shù)據(jù)庫,通過sqlType確定Delete、Insert、Select、Update
ExecuteTemplate
ExecuteTemplate

Executor

生成前鏡像
默認(rèn)ONLY_CARE_UPDATE_COLUMNS為true,一般只查更新了的列

5)AT模式的兩階段提交

5.1)一階段處理

5.2)二階段的提交處理

addToCommitQueue(context)一般都是先返回二階段提交狀態(tài),接下來再異步刪除UndoLog

5.3)二階段的回滾處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容