在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談Seata 源碼

京東云 ? 來(lái)源:京東物流 張士欣5 ? 作者:京東物流 張士欣 ? 2025-01-20 10:15 ? 次閱讀

作者:京東物流 張士欣

核心接口和類

ResourceManager

ResourceManager 是 seata 的重要組件之一,RM 負(fù)責(zé)管理分支數(shù)據(jù)資源的事務(wù)。

AbstractResourceManager 實(shí)現(xiàn) ResourceManager 提供模板方法。DefaultResourceManager 適配所有的 ResourceManager,所有方法調(diào)用都委派給對(duì)應(yīng)負(fù)責(zé)的 ResourceManager 處理。

DataSourceManager

此為 AT 模式核心管理器,DataSourceManager 繼承 AbstractResourceManager,管理數(shù)據(jù)庫(kù) Resouce 的注冊(cè),提交以及回滾等。

AsyncWorker

DataSourceManager 事務(wù)提交委派給 AsyncWorker 進(jìn)行提交的,因?yàn)槎汲晒α耍瑹o(wú)需回滾成功的數(shù)據(jù),只需要?jiǎng)h除生成的操作日志就行,采用異步方式,提高效率。

io.seata.rm.datasource.AsyncWorker#doBranchCommits
UndoLogManagerFactory.getUndoLogManager(dataSourceProxy.getDbType()).batchDeleteUndoLog(xids, branchIds, conn);

UndoLogManager

TransactionManager

DefaultTransactionManager

TransactionManagerHolder 為創(chuàng)建單例 TransactionManager 的工廠,可以使用 EnhancedServiceLoader 的 spi 機(jī)制加載自定義的類,默認(rèn)為DefaultTransactionManager。

GlobalTransaction

GlobalTransaction 接口提供給用戶開(kāi)啟事務(wù),提交,回滾,獲取狀態(tài)等方法。

DefaultGlobalTransaction

DefaultGlobalTransaction 是 GlobalTransaction 接口的默認(rèn)實(shí)現(xiàn),它持有 TransactionManager 對(duì)象,默認(rèn)開(kāi)啟事務(wù)超時(shí)時(shí)間為 60 秒,默認(rèn)名稱為 default,因?yàn)檎{(diào)用者的業(yè)務(wù)方法可能多重嵌套創(chuàng)建多個(gè) GlobalTransaction 對(duì)象開(kāi)啟事務(wù)方法,因此 GlobalTransaction 有 GlobalTransactionRole 角色屬性,只有Launcher 角色的才有開(kāi)啟、提交、回滾事務(wù)的權(quán)利。

GlobalTransactionContext

GlobalTransactionContext 為操作 GlobalTransaction 的工具類,提供創(chuàng)建新的 GlobalTransaction,獲取當(dāng)前線程有的 GlobalTransaction 等方法。

GlobalTransactionScanner

GlobalTransactionScanner 繼承 AbstractAutoProxyCreator 類,即實(shí)現(xiàn)了 SmartInstantiationAwareBeanPostProcessor 接口,會(huì)在 spring 容器啟動(dòng)初始化bean 的時(shí)候,對(duì) bean 進(jìn)行代理操作。wrapIfNecessary 為繼承父類代理 bean 的核心方法,如果配置了 service.disableGlobalTransaction 為 false 屬性則注解不生效直接返回,否則對(duì) GlobalTransactional 或 GlobalLock 的方法進(jìn)行攔截代理。

GlobalTransactionalInterceptor

GlobalTransactionalInterceptor 實(shí)現(xiàn) aop 的 MethodInterceptor 接口,對(duì)有 @GlobalTransactional 或 GlobalLock 注解的方法進(jìn)行代理。

TransactionalTemplate

TransactionalTemplate 模板類提供了一個(gè)開(kāi)啟事務(wù),執(zhí)行業(yè)務(wù),成功提交和失敗回滾的模板方法 execute(TransactionalExecutor business)。

try {
    // 2. If the tx role is 'GlobalTransactionRole.Launcher', send the request of beginTransaction to TC,
    //    else do nothing. Of course, the hooks will still be triggered.
    beginTransaction(txInfo, tx);

    Object rs;
    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
    resumeGlobalLockConfig(previousConfig);
    triggerAfterCompletion();
    cleanUp();
}

Resource

Resource 能被 ResourceManager 管理并且能夠關(guān)聯(lián) GlobalTransaction。

DataSourceProxy

DataSourceProxy 實(shí)現(xiàn) Resource 接口,BranchType 為 AT 自動(dòng)模式。它繼承 AbstractDataSourceProxy 代理類,所有的 DataSource 相關(guān)的方法調(diào)用傳入的targetDataSource 代理類的方法,除了創(chuàng)建 connection 方法為創(chuàng)建 ConnectionProxy 代理類。對(duì)象初始化時(shí)獲取連接的 jdbcUrl 作為 resourceId,并注冊(cè)至DefaultResourceManager 進(jìn)行管理。同時(shí)還提供獲取原始連接不被代理的 getPlainConnection 方法。

ExecuteTemplate

ExecuteTemplate 為具體 statement 的 execute,executeQuery 和 executeUpdate 執(zhí)行提供模板方法。

Executor

SQLRecognizer

SQLRecognizer 識(shí)別 sql 類型,獲取表名,表別名以及原生 sql

UndoExecutorFactory

UndoExecutorFactory 根據(jù) sqlType 生成對(duì)應(yīng)的 AbstractUndoExecutor。

UndoExecutor 為生成執(zhí)行 undoSql 的核心。如果全局事務(wù)回滾,它會(huì)根據(jù) beforeImage 和 afterImage 以及 sql 類型生成對(duì)應(yīng)的反向 sql 執(zhí)行回滾數(shù)據(jù),并添加臟數(shù)據(jù)校驗(yàn)機(jī)制,使回滾數(shù)據(jù)更加可靠。

DefaultCoordinator

DefaultCoordinator 即為 TC,全局事務(wù)默認(rèn)的事務(wù)協(xié)調(diào)器。它繼承 AbstractTCInboundHandler 接口,為 TC 接收 RM 和 TM 的 request 請(qǐng)求數(shù)據(jù),是進(jìn)行相應(yīng)處理的處理器。實(shí)現(xiàn) TransactionMessageHandler 接口,去處理收到的 RPC 信息。實(shí)現(xiàn) ResourceManagerInbound 接口,發(fā)送至 RM 的 branchCommit,branchRollback 請(qǐng)求。

Core

Core 接口為 seata 處理全局事務(wù)協(xié)調(diào)器 TC 的核心處理器,它繼承 ResourceManagerOutbound 接口,接受來(lái)自 RM 的 rpc 網(wǎng)絡(luò)請(qǐng)求 (branchRegister,branchReport,lockQuery)。同時(shí)繼承 TransactionManager 接口,接受來(lái)自 TM 的 rpc 網(wǎng)絡(luò)請(qǐng)求(begin, commit,rollback,getStatus),另外提供提供 3 個(gè)接口方法。

GlobalSession

GlobalSession 是 seata 協(xié)調(diào)器 DefaultCoordinator 管理維護(hù)的重要部件,當(dāng)用戶開(kāi)啟全局分布式事務(wù),TM 調(diào)用 begin 方法請(qǐng)求至 TC,TC 則創(chuàng)建GlobalSession 實(shí)例對(duì)象,返回唯一的 xid。它實(shí)現(xiàn) SessionLifecycle 接口,提供 begin,changeStatus,changeBranchStatus,addBranch,removeBranch 等操作 session 和 branchSession 的方法。

BranchSession

BranchSession 為分支 session,管理分支數(shù)據(jù),受 globalSession 統(tǒng)一調(diào)度管理,它的 lock 和 unlock 方法由 lockManger 實(shí)現(xiàn)。

LockManager

DefaultLockManager 是 LockManager 的默認(rèn)實(shí)現(xiàn),它獲取 branchSession 的 lockKey,轉(zhuǎn)換成 List,委派 Locker 進(jìn)行處理。

Locker

Locker 接口提供根據(jù)行數(shù)據(jù)獲取鎖,釋放鎖,是否鎖住和清除所有鎖的方法。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    654

    瀏覽量

    29608
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PCB經(jīng)驗(yàn)淺談

    PCB經(jīng)驗(yàn)淺談
    發(fā)表于 08-04 09:33

    手機(jī)硬件知識(shí)淺談

    手機(jī)硬件知識(shí)淺談
    發(fā)表于 05-15 11:04

    手機(jī)機(jī)構(gòu)設(shè)計(jì)淺談

    手機(jī)機(jī)構(gòu)設(shè)計(jì)淺談
    發(fā)表于 11-13 11:21

    淺談射頻PCB設(shè)計(jì)

    淺談射頻PCB設(shè)計(jì)
    發(fā)表于 03-20 15:07

    淺談移動(dòng)端相關(guān)概念

    淺談移動(dòng)端適配
    發(fā)表于 04-16 11:52

    淺談FPGA在安全產(chǎn)品中有哪些應(yīng)用?

    淺談FPGA在安全產(chǎn)品中有哪些應(yīng)用?
    發(fā)表于 05-08 06:36

    什么是數(shù)碼功放?淺談數(shù)碼功放

    什么是數(shù)碼功放?淺談數(shù)碼功放
    發(fā)表于 06-07 06:06

    淺談計(jì)算機(jī)的硬件維護(hù)

    軟件系統(tǒng)的同時(shí),也應(yīng)該重視對(duì)于計(jì)算機(jī)硬件的維護(hù)。以下是小編為大家精心準(zhǔn)備的:淺談計(jì)算機(jī)的硬件維護(hù)相關(guān)論文。內(nèi)容僅供參考,歡迎閱讀!淺談計(jì)算機(jī)的硬件維護(hù)全文如下:摘要: 現(xiàn)今科技的進(jìn)步日新月異,計(jì)算機(jī)作為信息時(shí)...
    發(fā)表于 09-08 07:52

    淺談三層架構(gòu)原理

    淺談三層架構(gòu)原理
    發(fā)表于 01-16 09:14

    淺談HAL庫(kù)uart數(shù)據(jù)收發(fā)與部分源碼

    HAL 庫(kù)uart 數(shù)據(jù)收發(fā)與部分源碼介紹提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動(dòng)添加例如:第一章 Python 機(jī)器學(xué)習(xí)入門之pandas的使用提示:寫完文章后,目錄可以自動(dòng)
    發(fā)表于 01-21 07:31

    Xilinx.CPLD源碼參考設(shè)計(jì)

    Xilinx FPGA工程例子源碼:Xilinx.CPLD源碼參考設(shè)計(jì)
    發(fā)表于 06-07 15:07 ?35次下載

    淺談ADC按鍵的應(yīng)用設(shè)計(jì)

    淺談ADC按鍵的應(yīng)用設(shè)計(jì)(現(xiàn)代電源技術(shù)pdf王建輝)-淺談ADC按鍵的應(yīng)用設(shè)計(jì)? ? ? ? ??
    發(fā)表于 09-17 13:37 ?25次下載
    <b class='flag-5'>淺談</b>ADC按鍵的應(yīng)用設(shè)計(jì)

    從代碼角度詳解Seata AT事務(wù)模式的流程

    Seata 四種事務(wù)模式中,AT 事務(wù)模式是阿里體系獨(dú)創(chuàng)的事務(wù)模式,對(duì)業(yè)務(wù)無(wú)侵入,也是 Seata 用戶最多的一種事務(wù)模式,兼具易用性與高性能。
    的頭像 發(fā)表于 09-29 10:08 ?1234次閱讀

    AOSP Android11系統(tǒng)源碼和內(nèi)核源碼簡(jiǎn)析

    AOSP源碼中并不包括內(nèi)核源碼,需要單獨(dú)下載,內(nèi)核源碼有很多版本,比如common是通用的Linux內(nèi)核,msm是用于使用高通MSM芯片的Android設(shè)備,goldfish是用于Android模擬器的內(nèi)核
    的頭像 發(fā)表于 01-29 09:25 ?5875次閱讀

    保姆級(jí)教程:Spring Cloud 集成Seata分布式事務(wù)

    Seata1.5.0版本直接是一個(gè)SpringBoot項(xiàng)目,下載后修改application.yml 文件中注冊(cè)中心、配置中心、存儲(chǔ)模式配置。參考resources/application.example.yml 文件 ,修改后如下
    的頭像 發(fā)表于 06-09 14:42 ?1436次閱讀
    保姆級(jí)教程:Spring Cloud 集成<b class='flag-5'>Seata</b>分布式事務(wù)
    主站蜘蛛池模板: 成人aaa| 天堂网欧美 | 中文字幕在线看视频一区二区三区 | 一级视频在线播放 | 天堂网www在线资源 天堂网www在线资源链接 | 国产黄色三级网站 | 国产一级特黄高清在线大片 | 88av影院| 色综合天天综一个色天天综合网 | 午夜视频免费国产在线 | 天天摸天天碰成人免费视频 | 两人性世界 | 免费色站 | 伊人久久天堂 | 4438全国最大成人免费高清 | 午夜湿| 你懂的在线观看视频 | 天天操天天干天天 | 偷偷操不一样的久久 | 亚洲韩国日本欧美一区二区三区 | 亚洲激情 | 丁香伊人五月综合激激激 | 日本三级日本三级日本三级极 | 四虎最新紧急入口4hu | 亚洲九九香蕉 | 啪啪91视频 | 亚洲狠狠网站色噜噜 | 天天摸天天躁天天添天天爽 | 日本欧美午夜 | 狠狠色丁香久久婷婷 | 中文字幕在线一区二区三区 | 亚洲色图欧美激情 | 夜夜夜爽爽爽久久久 | 国产亚洲美女精品久久久2020 | www亚洲免费| 色视频在线观看完整免费版 | 伊人网址| 轻点灬大ji巴太粗太长了啊h | 欧美女同网站 | 大杳蕉伊人狼人久久一本线 | 天堂在线观看视频观看www |