女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺談Seata 源碼

京東云 ? 來源:京東物流 張士欣5 ? 作者:京東物流 張士欣 ? 2025-01-20 10:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:京東物流 張士欣

核心接口和類

ResourceManager

ResourceManager 是 seata 的重要組件之一,RM 負責管理分支數據資源的事務。

AbstractResourceManager 實現 ResourceManager 提供模板方法。DefaultResourceManager 適配所有的 ResourceManager,所有方法調用都委派給對應負責的 ResourceManager 處理。

DataSourceManager

此為 AT 模式核心管理器,DataSourceManager 繼承 AbstractResourceManager,管理數據庫 Resouce 的注冊,提交以及回滾等。

AsyncWorker

DataSourceManager 事務提交委派給 AsyncWorker 進行提交的,因為都成功了,無需回滾成功的數據,只需要刪除生成的操作日志就行,采用異步方式,提高效率。

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

UndoLogManager

TransactionManager

DefaultTransactionManager

TransactionManagerHolder 為創建單例 TransactionManager 的工廠,可以使用 EnhancedServiceLoader 的 spi 機制加載自定義的類,默認為DefaultTransactionManager。

GlobalTransaction

GlobalTransaction 接口提供給用戶開啟事務,提交,回滾,獲取狀態等方法。

DefaultGlobalTransaction

DefaultGlobalTransaction 是 GlobalTransaction 接口的默認實現,它持有 TransactionManager 對象,默認開啟事務超時時間為 60 秒,默認名稱為 default,因為調用者的業務方法可能多重嵌套創建多個 GlobalTransaction 對象開啟事務方法,因此 GlobalTransaction 有 GlobalTransactionRole 角色屬性,只有Launcher 角色的才有開啟、提交、回滾事務的權利。

GlobalTransactionContext

GlobalTransactionContext 為操作 GlobalTransaction 的工具類,提供創建新的 GlobalTransaction,獲取當前線程有的 GlobalTransaction 等方法。

GlobalTransactionScanner

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

GlobalTransactionalInterceptor

GlobalTransactionalInterceptor 實現 aop 的 MethodInterceptor 接口,對有 @GlobalTransactional 或 GlobalLock 注解的方法進行代理。

TransactionalTemplate

TransactionalTemplate 模板類提供了一個開啟事務,執行業務,成功提交和失敗回滾的模板方法 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 管理并且能夠關聯 GlobalTransaction。

DataSourceProxy

DataSourceProxy 實現 Resource 接口,BranchType 為 AT 自動模式。它繼承 AbstractDataSourceProxy 代理類,所有的 DataSource 相關的方法調用傳入的targetDataSource 代理類的方法,除了創建 connection 方法為創建 ConnectionProxy 代理類。對象初始化時獲取連接的 jdbcUrl 作為 resourceId,并注冊至DefaultResourceManager 進行管理。同時還提供獲取原始連接不被代理的 getPlainConnection 方法。

ExecuteTemplate

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

Executor

SQLRecognizer

SQLRecognizer 識別 sql 類型,獲取表名,表別名以及原生 sql

UndoExecutorFactory

UndoExecutorFactory 根據 sqlType 生成對應的 AbstractUndoExecutor。

UndoExecutor 為生成執行 undoSql 的核心。如果全局事務回滾,它會根據 beforeImage 和 afterImage 以及 sql 類型生成對應的反向 sql 執行回滾數據,并添加臟數據校驗機制,使回滾數據更加可靠。

DefaultCoordinator

DefaultCoordinator 即為 TC,全局事務默認的事務協調器。它繼承 AbstractTCInboundHandler 接口,為 TC 接收 RM 和 TM 的 request 請求數據,是進行相應處理的處理器。實現 TransactionMessageHandler 接口,去處理收到的 RPC 信息。實現 ResourceManagerInbound 接口,發送至 RM 的 branchCommit,branchRollback 請求。

Core

Core 接口為 seata 處理全局事務協調器 TC 的核心處理器,它繼承 ResourceManagerOutbound 接口,接受來自 RM 的 rpc 網絡請求 (branchRegister,branchReport,lockQuery)。同時繼承 TransactionManager 接口,接受來自 TM 的 rpc 網絡請求(begin, commit,rollback,getStatus),另外提供提供 3 個接口方法。

GlobalSession

GlobalSession 是 seata 協調器 DefaultCoordinator 管理維護的重要部件,當用戶開啟全局分布式事務,TM 調用 begin 方法請求至 TC,TC 則創建GlobalSession 實例對象,返回唯一的 xid。它實現 SessionLifecycle 接口,提供 begin,changeStatus,changeBranchStatus,addBranch,removeBranch 等操作 session 和 branchSession 的方法。

BranchSession

BranchSession 為分支 session,管理分支數據,受 globalSession 統一調度管理,它的 lock 和 unlock 方法由 lockManger 實現。

LockManager

DefaultLockManager 是 LockManager 的默認實現,它獲取 branchSession 的 lockKey,轉換成 List,委派 Locker 進行處理。

Locker

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

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源碼
    +關注

    關注

    8

    文章

    671

    瀏覽量

    30309
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PCB經驗淺談

    PCB經驗淺談
    發表于 08-04 09:33

    手機硬件知識淺談

    手機硬件知識淺談
    發表于 05-15 11:04

    手機機構設計淺談

    手機機構設計淺談
    發表于 11-13 11:21

    淺談射頻PCB設計

    淺談射頻PCB設計
    發表于 03-20 15:07

    淺談移動端相關概念

    淺談移動端適配
    發表于 04-16 11:52

    淺談FPGA在安全產品中有哪些應用?

    淺談FPGA在安全產品中有哪些應用?
    發表于 05-08 06:36

    什么是數碼功放?淺談數碼功放

    什么是數碼功放?淺談數碼功放
    發表于 06-07 06:06

    淺談計算機的硬件維護

    軟件系統的同時,也應該重視對于計算機硬件的維護。以下是小編為大家精心準備的:淺談計算機的硬件維護相關論文。內容僅供參考,歡迎閱讀!淺談計算機的硬件維護全文如下:摘要: 現今科技的進步日新月異,計算機作為信息時...
    發表于 09-08 07:52

    淺談三層架構原理

    淺談三層架構原理
    發表于 01-16 09:14

    淺談HAL庫uart數據收發與部分源碼

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

    淺談ADC按鍵的應用設計

    淺談ADC按鍵的應用設計(現代電源技術pdf王建輝)-淺談ADC按鍵的應用設計? ? ? ? ??
    發表于 09-17 13:37 ?25次下載
    <b class='flag-5'>淺談</b>ADC按鍵的應用設計

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

    Seata 四種事務模式中,AT 事務模式是阿里體系獨創的事務模式,對業務無侵入,也是 Seata 用戶最多的一種事務模式,兼具易用性與高性能。
    的頭像 發表于 09-29 10:08 ?1451次閱讀

    AOSP Android11系統源碼和內核源碼簡析

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

    Java算法大全源碼包開源源碼

    Java算法大全源碼包開源源碼
    發表于 06-07 14:58 ?1次下載

    保姆級教程:Spring Cloud 集成Seata分布式事務

    Seata1.5.0版本直接是一個SpringBoot項目,下載后修改application.yml 文件中注冊中心、配置中心、存儲模式配置。參考resources/application.example.yml 文件 ,修改后如下
    的頭像 發表于 06-09 14:42 ?1805次閱讀
    保姆級教程:Spring Cloud 集成<b class='flag-5'>Seata</b>分布式事務