seata之a(chǎn)t模式源碼分析(一)

at模式講解

public Object execute(TransactionalExecutor business) throws Throwable {
        // 1 get transactionInfo  獲取事務(wù)相關(guān)的配置信息
        // 1.1 get or create a transaction  獲取事務(wù)
        // 1.2 根據(jù)事務(wù)不同的傳播機(jī)制 進(jìn)行處理
   
        try {

                // 2. begin transaction
                beginTransaction(txInfo, tx);

                Object rs = null;
                try {

                    // Do Your Business
                    rs = business.execute();

                } catch (Throwable ex) {

                    // 3.the needed business exception to rollback.
                    completeTransactionAfterThrowing(txInfo, tx, ex);
                    throw ex;
                }

                // 4. everything is fine, commit.
                commitTransaction(tx);

                return rs;
            } finally {
                //5. clear
                triggerAfterCompletion();
                cleanUp();
            }
        } finally {
            tx.resume(suspendedResourcesHolder);
        }

    }

假設(shè)現(xiàn)在有一個(gè)上游方法,內(nèi)部調(diào)用了a服務(wù)和b服務(wù),這兩個(gè)服務(wù)都是分布式的,并且都更新了各自的數(shù)據(jù),則相應(yīng)的時(shí)序邏輯如下:


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

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