一左电、AT模式開發(fā)實戰(zhàn)
1)準(zhǔn)備階段
2)啟動階段
2)正常提交
3)異常回滾
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配置文件中除非更新版本不會變昔榴,如果配到配置中心就有機(jī)會被改變
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)二階段的回滾處理