欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

seata中如何使用AT和TCC模式

本篇文章為大家展示了seata中如何使用AT和TCC模式,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

在官渡等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),官渡網(wǎng)站建設(shè)費(fèi)用合理。

seata的AT和TCC模式的使用

名詞解釋

seata中如何使用AT和TCC模式

圖片來(lái)自 Seata解析-TM、RM、TC交互流程梳理

TC (Transaction Coordinator) - 事務(wù)協(xié)調(diào)者

維護(hù)全局和分支事務(wù)的狀態(tài),驅(qū)動(dòng)全局事務(wù)提交或回滾。

TM (Transaction Manager) - 事務(wù)管理器

定義全局事務(wù)的范圍:開(kāi)始全局事務(wù)、提交或回滾全局事務(wù)。

RM (Resource Manager) - 資源管理器

管理分支事務(wù)處理的資源,與TC交談以注冊(cè)分支事務(wù)和報(bào)告分支事務(wù)的狀態(tài),并驅(qū)動(dòng)分支事務(wù)提交或回滾。

模式介紹

AT

  • 基于支持本地 ACID 事務(wù)的關(guān)系型數(shù)據(jù)庫(kù)。

  • Java 應(yīng)用,通過(guò) JDBC 訪問(wèn)數(shù)據(jù)庫(kù)。

兩階段提交協(xié)議的演變:

  • 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。

  • 二階段:

    • 提交異步化,非??焖俚赝瓿?。

    • 回滾通過(guò)一階段的回滾日志進(jìn)行反向補(bǔ)償。

TCC

一個(gè)分布式的全局事務(wù),整體是 兩階段提交的模型。全局事務(wù)是由若干分支事務(wù)組成的,分支事務(wù)要滿足 兩階段提交的模型要求,即需要每個(gè)分支事務(wù)都具備自己的:

  • 一階段 prepare 行為

  • 二階段 commit 或 rollback 行為

TCC 模式,不依賴于底層數(shù)據(jù)資源的事務(wù)支持:

  • 一階段 prepare 行為:調(diào)用 自定義的 prepare 邏輯。

  • 二階段 commit 行為:調(diào)用 自定義的 commit 邏輯。

  • 二階段 rollback 行為:調(diào)用 自定義的 rollback 邏輯。

所謂 TCC 模式,是指支持把 自定義的分支事務(wù)納入到全局事務(wù)的管理中。

使用

配置

1. 啟動(dòng)seata-server

參照官網(wǎng)部署教程,啟動(dòng)成功后可以看到這句 Server started, listen port: 8091,注意這個(gè)端口不是用來(lái)通過(guò)http訪問(wèn)的, 這個(gè)端口是用來(lái)協(xié)調(diào)應(yīng)用分布式事務(wù)的,直接通過(guò)瀏覽器訪問(wèn)會(huì)報(bào)錯(cuò)。

SLF4J: A number (18) of logging calls during the initialization phase have been intercepted and are
SLF4J: now being replayed. These are subject to the filtering rules of the underlying logging system.
SLF4J: See also http://www.slf4j.org/codes.html#replay
09:54:04.048  INFO --- [                     main] io.seata.config.FileConfiguration        : The file name of the operation is registry
09:54:04.055  INFO --- [                     main] io.seata.config.FileConfiguration        : The configuration file used is C:\Server\seata-server-1.4.2\conf\registry.conf
09:54:04.119  INFO --- [                     main] io.seata.config.FileConfiguration        : The file name of the operation is file.conf
09:54:04.119  INFO --- [                     main] io.seata.config.FileConfiguration        : The configuration file used is C:\Server\seata-server-1.4.2\conf\file.conf
09:54:06.578  INFO --- [                     main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
09:54:07.304  INFO --- [                     main] i.s.core.rpc.netty.NettyServerBootstrap  : Server started, listen port: 8091
2. 添加依賴
<!-- 分布式事務(wù)seata -->
<dependency>
    <groupid>com.alibaba.cloud</groupid>
    <artifactid>spring-cloud-starter-alibaba-seata</artifactid>
</dependency>

<!-- 序列化方式選擇的kryo, 在使用jackson和fastjson時(shí),對(duì)時(shí)間的序列化一直出問(wèn)題 -->
<dependency>
    <groupid>de.javakaffee</groupid>
    <artifactid>kryo-serializers</artifactid>
    <version>${kryo.serializers.version}</version>
</dependency>
3. 添加配置
seata:
  service:
  	# TC服務(wù)列表 僅注冊(cè)中心為file時(shí)使用
    grouplist:
      default : seata.server.cn:8091
    # 事務(wù)群組, service-goods-center為分組,配置項(xiàng)值為TC集群名
    vgroup-mapping:
      service-goods-center: default
    # 全局事務(wù)開(kāi)關(guān),默認(rèn)false。false為開(kāi)啟,true為關(guān)閉
    disable-global-transaction: false
  # 視作分名
  tx-service-group: service-goods-center
  client:
    undo:
      # undolog的序列化方式, AT模式需要配置,因?yàn)锳T模式數(shù)據(jù)庫(kù)會(huì)有undo-log表
      log-serialization: kryo
4. 數(shù)據(jù)庫(kù)配置

訪問(wèn) seata數(shù)據(jù)庫(kù)腳本 鏈接,找到對(duì)應(yīng)版本和對(duì)應(yīng)數(shù)據(jù)庫(kù)類型的SQL腳本,在業(yè)務(wù)系統(tǒng)創(chuàng)建出來(lái)undo-log表。

1.3.0版本

CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT(20)   NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(100) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';

AT模式的使用

只需要在TM端服務(wù)方法上加上@GlobalTransactional注解,被調(diào)用RM端方法可以不用顯式的聲明@GlobalTransactional注解

@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public String insert() {
    service.insert();
    //放開(kāi)以下注解拋出異常
    //throw new RuntimeException("服務(wù)AT測(cè)試回滾");
    return "success";
}

TCC的使用

1. 定義TCC接口

@LocalTCC一定需要注解在接口上,否則不生效,此接口可以是尋常的業(yè)務(wù)接口,只要實(shí)現(xiàn)了TCC的兩階段提交對(duì)應(yīng)方法便可,TCC相關(guān)注解如下:

  • @LocalTCC 適用于SpringCloud+Feign模式下的TCC

  • @TwoPhaseBusinessAction 注解try方法,其中name為當(dāng)前tcc方法的bean名稱,寫方法名便可(全局唯一),commitMethod指向提交方法,rollbackMethod指向事務(wù)回滾方法。指定好三個(gè)方法之后,seata會(huì)根據(jù)全局事務(wù)的成功或失敗,去幫我們自動(dòng)調(diào)用提交方法或者回滾方法。

  • @BusinessActionContextParameter 注解可以將參數(shù)傳遞到二階段(commitMethod/rollbackMethod)的方法。

  • BusinessActionContext 便是指TCC事務(wù)上下文

/**
 * 這里定義tcc的接口
 * 這些一定要定義在接口上
 * 我們使用springCloud的遠(yuǎn)程調(diào)用
 * 那么這里使用LocalTCC便可
 *
 * @author tanzj
 */
@LocalTCC
public interface TccService {
 
    /**
     * 定義兩階段提交
     * name = 該tcc的bean名稱,全局唯一
     * commitMethod = commit 為二階段確認(rèn)方法
     * rollbackMethod = rollback 為二階段取消方法
     * BusinessActionContextParameter注解 傳遞參數(shù)到二階段中
     *
     */
    @TwoPhaseBusinessAction(name = "insert", commitMethod = "commitTcc", rollbackMethod = "cancel")
    String insert(
            @BusinessActionContextParameter(paramName = "params") Map<string, string> params
    );
 
    /**
     * 確認(rèn)方法、可以另命名,但要保證與commitMethod一致
     * context可以傳遞try方法的參數(shù)
     * 參數(shù)是固定的, 不可以增加或減少,
     */
    boolean commitTcc(BusinessActionContext context);
 
    /**
     * 二階段取消方法
     * 參數(shù)是固定的, 不可以增加或減少
     */
    boolean cancel(BusinessActionContext context);
}
2. TCC接口的調(diào)用和實(shí)現(xiàn)
  • 在try方法中使用@Transational可以直接通過(guò)spring事務(wù)回滾關(guān)系型數(shù)據(jù)庫(kù)中的操作,而非關(guān)系型數(shù)據(jù)庫(kù)等中間件的回滾操作可以交給rollbackMethod方法處理。

  • 使用context.getActionContext("params")便可以得到一階段try中定義的參數(shù),在二階段對(duì)此參數(shù)進(jìn)行業(yè)務(wù)回滾操作。

  • **注意1:**此處亦不可以捕獲異常(同理切面處理異常),否則TCC將識(shí)別該操作為成功,二階段直接執(zhí)行commitMethod。

  • **注意2:**TCC模式要開(kāi)發(fā)者自行保證冪等和事務(wù)防懸掛

調(diào)用代碼

@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public String insert() {
    log.info("xid = " + RootContext.getXID());
    //todo 實(shí)際的操作,或操作MQ、redis等
    tccDAO.insert(new HashMap&lt;&gt;());
    //放開(kāi)以下注解拋出異常
    //throw new RuntimeException("服務(wù)tcc測(cè)試回滾");
    return "success";
}

混合使用

也沒(méi)別的,默認(rèn)使用的就是AT事務(wù),別在同一個(gè)接口方法上添加TCC注解就行,可以通過(guò)AT方法嵌套TCC方法,注意不要通過(guò)this.xx()調(diào)用,這樣會(huì)無(wú)法應(yīng)用代理的增強(qiáng)。

mybatis-plus出現(xiàn)問(wèn)題,解決方案

透過(guò)源碼解決SeataAT模式整合Mybatis-Plus失去MP特性的問(wèn)題</string,>

上述內(nèi)容就是seata中如何使用AT和TCC模式,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標(biāo)題名稱:seata中如何使用AT和TCC模式
標(biāo)題來(lái)源:http://aaarwkj.com/article26/pjchjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、品牌網(wǎng)站制作品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
日韩夫妻精品熟妇人妻一区| 美女网站色在线免费观看午夜精品 | 蜜桃免费观看在线视频| 少妇互射视频免费视频 | 国产亚洲精品精品国产亚洲| 国产免费av一区二区在线观看| 91九色精品视频在线观看| 97久久久人妻精品一区| 中文字幕一区二区久久综合| 国产一区二区三区av| 在线观看午夜视频免费| 国产三级无遮挡在线观看| 国产传媒欧美日韩成人精品| 美女口爆吞精一区二区| 精品亚洲一区二区三区四| 欧美特黄在线免费观看| 国产精品久久综合网| 亚洲国产剧情中文字幕| 日韩中文字幕在线首页| 黄色大片免费在线观看| 成年人免费国产视频网站| 久久成人a毛片免费观看网站| 欧美精品国产欧美精品国产| 日本精品动漫一区二区三区| 午夜宅男在线视频观看| 日本免费一区二区三区手机在线 | 亚洲午夜精品久久久天堂| 91欧美精品午夜性色福利| 亚洲中国av一区二区| 免费亚洲一级黄色录像| 日本欧美激情在线观看| 色婷婷激一区二区三区| 日韩欧美一区二区免费| 97视频在线观看免费| 日本顶级片一区二区三区| 亚洲日本久久久午夜精品| 亚洲国产在线一区二区| 成人免费视频观看国产| 九九视频在线观看免费专区| 精彩国产av一区二区三区| 日本黄网色三级三级三级|