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