国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java微服務分布式事務框架seata的TCC模式

這篇具有很好參考價值的文章主要介紹了Java微服務分布式事務框架seata的TCC模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??作者主頁:青花鎖 ??簡介:Java領域優(yōu)質創(chuàng)作者??、Java微服務架構公號作者??

??簡歷模板、學習資料、面試題庫、技術互助

??文末獲取聯系方式 ??

Java微服務分布式事務框架seata的TCC模式,付費專欄臨時專欄,java,微服務,分布式,seata,tcc


往期熱門專欄回顧

專欄 描述
Java項目實戰(zhàn) 介紹Java組件安裝、使用;手寫框架等
Aws服務器實戰(zhàn) Aws Linux服務器上操作nginx、git、JDK、Vue
Java微服務實戰(zhàn) Java 微服務實戰(zhàn),Spring Cloud Netflix套件、Spring Cloud Alibaba套件、Seata、gateway、shadingjdbc等實戰(zhàn)操作
Java基礎篇 Java基礎閑聊,已出HashMap、String、StringBuffer等源碼分析,JVM分析,持續(xù)更新中
Springboot篇 從創(chuàng)建Springboot項目,到加載數據庫、靜態(tài)資源、輸出RestFul接口、跨越問題解決到統一返回、全局異常處理、Swagger文檔
Spring MVC篇 從創(chuàng)建Spring MVC項目,到加載數據庫、靜態(tài)資源、輸出RestFul接口、跨越問題解決到統一返回
華為云服務器實戰(zhàn) 華為云Linux服務器上操作nginx、git、JDK、Vue等,以及使用寶塔運維操作添加Html網頁、部署Springboot項目/Vue項目等
Java爬蟲 通過Java+Selenium+GoogleWebDriver 模擬真人網頁操作爬取花瓣網圖片、bing搜索圖片等
Vue實戰(zhàn) 講解Vue3的安裝、環(huán)境配置,基本語法、循環(huán)語句、生命周期、路由設置、組件、axios交互、Element-ui的使用等
Spring 講解Spring(Bean)概念、IOC、AOP、集成jdbcTemplate/redis/事務等

系列文章目錄

第一章 Java線程池技術應用
第二章 CountDownLatch和Semaphone的應用
第三章 Spring Cloud 簡介
第四章 Spring Cloud Netflix 之 Eureka
第五章 Spring Cloud Netflix 之 Ribbon
第六章 Spring Cloud 之 OpenFeign
第七章 Spring Cloud 之 GateWay
第八章 Spring Cloud Netflix 之 Hystrix
第九章 代碼管理gitlab 使用
第十章 SpringCloud Alibaba 之 Nacos discovery
第十一章 SpringCloud Alibaba 之 Nacos Config
第十二章 Spring Cloud Alibaba 之 Sentinel
第十三章 JWT
第十四章 RabbitMQ應用
第十五章 RabbitMQ 延遲隊列
第十六章 spring-cloud-stream
第十七章 Windows系統安裝Redis、配置環(huán)境變量
第十八章 查看、修改Redis配置,介紹Redis類型
第十九章 Redis RDB AOF
第二十章 Spring boot 操作 Redis
第二十一章 Java多線程安全與鎖
第二十二章 Java微服務分布式事務框架seata
第二十三章 Java微服務分布式事務框架seata的TCC模式



前言

上一章節(jié)介紹微服務分布式項目中,使用的事務框架seata,本章節(jié)介紹分布式事務框架seata TCC模式,以及集成到Springboot、微服務框架里。

1、TCC模式

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

  • 一階段 prepare 行為
  • 二階段 commit 或 rollback 行為
    Java微服務分布式事務框架seata的TCC模式,付費專欄臨時專欄,java,微服務,分布式,seata,tcc

根據兩階段行為模式的不同,我們將分支事務劃分為 Automatic (Branch) Transaction Mode 和 TCC (Branch) Transaction Mode.

1.1、AT 模式(參考鏈接 TBD)基于 支持本地 ACID 事務 的 關系型數據庫

1.1.1、 一階段 prepare 行為

在本地事務中,一并提交業(yè)務數據更新和相應回滾日志記錄。

1.1.2、二階段 commit 行為

馬上成功結束,自動 異步批量清理回滾日志。

1.1.3、二階段 rollback 行為

通過回滾日志,自動 生成補償操作,完成數據回滾。

1.2、TCC 模式,不依賴于底層數據資源的事務支持

1.2.1、一階段 prepare 行為

調用 自定義 的 prepare 邏輯。try

1.2.2、二階段 commit 行為

調用 自定義 的 commit 邏輯。confirm

1.2.3、二階段 rollback 行為

調用 自定義 的 rollback 邏輯。cancel

2、例子

2.1、定義controller

/**
 * 采購
 */
@PostMapping("/purchaseTCC")
@GlobalTransactional
public String purchaseTCC(@RequestBody OrderDTO orderDTO){
    this.businessTCCService.purchase(orderDTO);
    return "success";
}

2.2、定義service

@LocalTCC
public interface BusinessTCCService {
    /**
     * 采購 執(zhí)行資源檢查及預留操作
     */
    @TwoPhaseBusinessAction(name = "purchase",commitMethod = "commit",rollbackMethod = "rollback")
    public void purchase(@BusinessActionContextParameter(paramName = "orderDTO") OrderDTO orderDTO);

    /**
     * 全局事務進行提交
     * @param businessActionContext
     * @return
     */
    boolean commit(BusinessActionContext businessActionContext);

    /**
     * 全局事務進行不回滾
     * @param businessActionContext
     * @return
     */
    boolean rollback(BusinessActionContext businessActionContext);
}

package com.xxxx.store.business.service.impl;

import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xxxx.store.business.service.BusinessService;
import com.xxxx.store.business.service.BusinessTCCService;
import com.xxxx.store.business.service.OrderService;
import com.xxxx.store.business.service.StorageService;
import com.xxxx.store.common.dto.OrderDTO;
import com.xxxx.store.common.dto.StorageDTO;
import io.seata.rm.tcc.api.BusinessActionContext;
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.File;

@Service
public class BusinessTCCServiceImpl implements BusinessTCCService {
    @Value("${file.path}")
    private String filePath;
    @Autowired
    private OrderService orderService;
    @Autowired
    private StorageService storageService;

    @Override
    public void purchase(OrderDTO orderDTO) {
        //減庫存
        this.storageService.deduct(new StorageDTO(null,orderDTO.getCommodityCode(),orderDTO.getCount()));
        //創(chuàng)建訂單
        this.orderService.create(orderDTO);
    }

    @Override
    public boolean commit(BusinessActionContext businessActionContext) {
        System.out.println("事務ID:" + businessActionContext.getXid());
        return true;
    }

    @Override
    public boolean rollback(BusinessActionContext businessActionContext) {
        JSONObject jSONObject = (JSONObject)businessActionContext.getActionContext("orderDTO");

        OrderDTO orderDTO = jSONObject.toJavaObject(OrderDTO.class);
        StorageDTO storageDTO = new StorageDTO(null, orderDTO.getCommodityCode(), orderDTO.getCount());

        String s = JSON.toJSONString(storageDTO);
        String md5 = SecureUtil.md5(s);
        System.out.println("**************觸發(fā)回滾操作:" + filePath + md5);
        File file = new File(filePath + md5);
        file.delete();
        return true;
    }

    /*@Override
    public void purchase(OrderDTO orderDTO) {
        //減庫存
        this.storageService.deduct(new StorageDTO(null,orderDTO.getCommodityCode(),orderDTO.getCount()));
        //創(chuàng)建訂單
        this.orderService.create(orderDTO);
    }*/

}
注解 描述
@LocalTCC 一定需要注解在接口上,否則不生效,此接口可以是尋常的業(yè)務接口,只要實現了TCC的兩階段提交對應方法便可,適用于SpringCloud+Feign模式下的TCC。
@TwoPhaseBusinessAction 注解try方法,其中name為當前tcc方法的bean名稱,寫方法名便可(全局唯一),commitMethod指向提交方法,rollbackMethod指向事務回滾方法。指定好三個方法之后,seata會根據全局事務的成功或失敗,自動調用提交方法或者回滾方法。
@BusinessActionContextParameter 使用該注解可以將參數傳遞到二階段commit或者rollback的方法中,方便調用。
BusinessActionContext TCC事務上下文,使用BusinessActionContext.getActionContext(“params”)便可以得到一階段try中定義的參數,在二階段參考此參數進行業(yè)務回滾操作。

建議:可以在try方法中使用@Transational,直接通過spring來控制關系型數據庫的事務,進行回滾的操作,而非關系型數據庫等中間件的回滾操作可以交給rollbackMethod方法處理。

建議:try接口不可以捕獲異常,否則TCC將識別該操作為成功,直接執(zhí)行二階段commit方法。


資料獲取,更多粉絲福利,關注下方公眾號獲取

Java微服務分布式事務框架seata的TCC模式,付費專欄臨時專欄,java,微服務,分布式,seata,tcc文章來源地址http://www.zghlxwxcb.cn/news/detail-842617.html

到了這里,關于Java微服務分布式事務框架seata的TCC模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SpringCloud入門實戰(zhàn)(十五)分布式事務框架Seata簡介

    SpringCloud入門實戰(zhàn)(十五)分布式事務框架Seata簡介

    ?? 學技術、更要掌握學習的方法,一起學習,讓進步發(fā)生 ???? 作者:一只IT攻城獅 ,關注我,不迷路 。 ??學習建議:1、養(yǎng)成習慣,學習java的任何一個技術,都可以先去官網先看看,更準確、更專業(yè)。 ??學習建議:2、然后記住每個技術最關鍵的特性(通常一句話或者

    2024年02月10日
    瀏覽(28)
  • 微服務--Seata(分布式事務)

    微服務--Seata(分布式事務)

    TCC模式在代碼中實現:侵入性強,并且的自己實現事務控制邏輯 Try,Confirm() cancel() 第三方開源框架:BeyeTCCTCC-transactionHimly 異步實現:MQ可靠消息最終一致性 @GlobalTransacational---AT模式

    2024年02月10日
    瀏覽(19)
  • 08-微服務Seata分布式事務使用

    08-微服務Seata分布式事務使用

    一、分布式事務簡介 事務ACID: A(Atomic):原子性,構成事務的所有操作,要么都執(zhí)行完成,要么全部不執(zhí)行,不可能出現部分成功部分失 敗的情況。 C(Consistency):一致性,在事務執(zhí)行前后,數據庫的一致性約束沒有被破壞。比如:張三向李四轉100元, 轉賬前和轉賬后的

    2024年01月24日
    瀏覽(31)
  • 微服務13-Seata的四種分布式事務模式

    微服務13-Seata的四種分布式事務模式

    XA模式分為兩種情況 : 提交成功: 提交失?。?具有強一致性seata相當于是在RM上做了一層封裝; XA模式 優(yōu)點 : 1.事務的強一致性,只要有失敗的,TC事務協調者就會發(fā)送信息讓RM回滾——滿足ACID原則 2.沒有代碼侵入,常用數據庫都支持 缺點 : 1.第一階段就要鎖定數據庫資源

    2024年02月07日
    瀏覽(43)
  • 分布式軟件架構——分布式事務TCC和SAGA

    分布式軟件架構——分布式事務TCC和SAGA

    TCC 是另一種常見的分布式事務機制,它是“ Try-Confirm-Cancel ”三個單詞的縮寫,是由數據庫專家 Pat Helland 在 2007 年撰寫的論文《Life beyond Distributed Transactions: An Apostate’s Opinion》中提出。 前面介紹的可靠消息隊列雖然能保證最終的結果是相對可靠的,過程也足夠簡單(相對于

    2024年02月12日
    瀏覽(23)
  • 【SpringCloud】微服務保護(Sentinel)和分布式事務(Seata)

    【SpringCloud】微服務保護(Sentinel)和分布式事務(Seata)

    建議學完該系列前篇 【SpringCloud】商城項目拆分微服務各個組件學習 然后再來看本文 然后學習 【RabbitMQ】交換機、隊列、可靠性保證和延遲消息 在微服務遠程調用的過程中,還存在幾個問題需要解決。 首先是業(yè)務健壯性問題: 例如在之前的查詢購物車列表業(yè)務中,購物車

    2024年01月25日
    瀏覽(23)
  • 分布式事務TCC 你真的理解了嗎

    分布式事務TCC 你真的理解了嗎

    TCC(補償事務) TCC 屬于目前比較火的一種柔性事務解決方案。TCC 這個概念最早誕生于數據庫專家帕特 · 赫蘭德(Pat Helland)于 2007 發(fā)表的 《Life beyond Distributed Transactions: an Apostate’s Opinion》 這篇論文,感興趣的小伙伴可以閱讀一下這篇論文。 三個階段 簡單來說,TCC 是 Tr

    2024年02月02日
    瀏覽(19)
  • 分布式事務-TCC案例分析流程圖

    分布式事務-TCC案例分析流程圖

    防止cancel方法在最后執(zhí)行出現問題,用戶收到提示已經退款成功但是由于cancel過慢或者出現問題(雖然最后會重試成功但是用戶體驗很差),可以做以下的業(yè)務sql模型優(yōu)化(增加一個凍結金額)。

    2024年02月07日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包