欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Hmily實現(xiàn)TCC分布式事務(wù)

 更新時間:2024年11月04日 10:02:00   作者:我是小趴菜  
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何整合Hmily實現(xiàn)TCC分布式事務(wù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

今天是分布式事務(wù)系列的第二篇,springBoot整合Hmily實現(xiàn)TCC分布式事務(wù)

第一篇鏈接:springBoot整合atomikos實現(xiàn)分布式事務(wù)

首先我們創(chuàng)建三個springboot項目

  • eureka-server:eureka注冊中心
  • test-server:服務(wù)一
  • cpy-server:服務(wù)二

大家不要在意項目名稱了,我就隨意取的,大家好創(chuàng)建好三個服務(wù)

然后在 test-servercpy-server服務(wù)的resources目錄下創(chuàng)建 hmily.yml 文件,文件內(nèi)容如下:

hmily:
  server:
    configMode: local
    appName: test-server

  #  如果server.configMode eq local 的時候才會讀取到這里的配置信息.
  config:
    appName: test-server
    repository: mysql

  ribbon:
    rule:
      enabled: true

repository:
  database:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/hmily?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: 12345

metrics:
  metricsName: prometheus
  
  //注意:test-server和cpy-server的端口號要不一樣
  port: 8801

然后我們需要創(chuàng)建一個hmily 的數(shù)據(jù)庫

test-server服務(wù)改造

現(xiàn)在我們要實現(xiàn)微服務(wù)之間的服務(wù)調(diào)用,在這里我們使用openfeign來調(diào)用cpy-server服務(wù)的接口

在test-server服務(wù)的TestServiceImpl類中實現(xiàn)具體的業(yè)務(wù)邏輯

@Service
public class TestServiceImpl implements TestService{

    @Resource
    private TestDao testDao;

    @Resource
    private CypFeign cypFeign;

    //在需要事務(wù)的方法上加上 @HmilyTCC注解
    @HmilyTCC(confirmMethod = "confirm",cancelMethod = "cancel")
    @Override
    public String insert(Test test) {
        //本地服務(wù)調(diào)用
        testDao.insert(test);

        //調(diào)用cyp-server服務(wù)的接口
        cypFeign.insert();

        //模擬拋出異常
        int i = 1/ 0;
        return "success";
    }


    // confirm名字要與@HmilyTCC中的confirmMethod中配置的值一樣,而是參數(shù)要與方法一致
    public String confirm(Test test) {
        //修改狀態(tài)為1
        System.out.println("test - confirm執(zhí)行了");
        testDao.update(test.getId());
        return "confirm";
    }

    // cancel名字要與@HmilyTCC中的cancelMethod中配置的值一樣,而是參數(shù)要與方法一致
    public String cancel(Test test) {
        System.out.println("test - cancel執(zhí)行了");
        testDao.del(test.getId());
        return "cancel";
    }

然后在openFeign的接口也要加上 @Hmily 注解

@FeignClient(value = "cpy-server")
public interface CypFeign {

    @PostMapping("/cyp/insert")
    @Hmily
    String insert();
}

cpy-server服務(wù)改造

@Service
public class CypServiceImpl implements CypService{
    @Resource
    private CypDao cypDao;
    
    //在test-server調(diào)用的方法上加上 @HmilyTCC
    @HmilyTCC(confirmMethod = "confirm",cancelMethod = "cancel")
    public String insert(Cyp cyp) {
        cypDao.insert(cyp);
        return "success";
    }

    // confirm名字要與@HmilyTCC中的confirmMethod中配置的值一樣,而是參數(shù)要與方法一致
    public String confirm(Cyp cyp) {
        System.out.println("confirm執(zhí)行了");
        cypDao.update(cyp.getId());
        return "confirm";
    }

    // cancel名字要與@HmilyTCC中的cancelMethod中配置的值一樣,而是參數(shù)要與方法一致
    public String cancel(Cyp cyp) {
        System.out.println("cancel執(zhí)行了");
        cypDao.del(cyp.getId());
        return "cancel";
    }
}

在有異常的時候,兩個服務(wù)都執(zhí)行了cancel階段的方法

當(dāng)把模擬異常的代碼去掉,發(fā)現(xiàn)兩個服務(wù)都正常的執(zhí)行了提交方法

到此,springboot微服務(wù)整合Hmily實現(xiàn)TCC分布式事務(wù)已經(jīng)完成了

但是TCC服務(wù)還是要有一些問題需要考慮的,主要有以下幾個

  • 1:try階段異常
  • 2:cancel階段異常
  • 3:comfirm階段異常
  • 4:本地事務(wù)與TCC事務(wù)沖突
  • 5:空回滾
  • 6:事務(wù)懸掛

至于如何解決以上問題,可以參考:TCC分布式事務(wù)七種異常情況小結(jié)

以上就是SpringBoot整合Hmily實現(xiàn)TCC分布式事務(wù)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Hmily TCC分布式事務(wù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SWT(JFace)體驗之ViewForm的使用

    SWT(JFace)體驗之ViewForm的使用

    SWT(JFace)體驗之ViewForm的使用
    2009-06-06
  • ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法

    ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法

    ThreadLocal 的內(nèi)存泄漏問題通常發(fā)生在使用 ThreadLocal 存儲對象時,尤其是在多線程環(huán)境中,線程池中的線程復(fù)用可能導(dǎo)致一些資源沒有及時清理,從而引發(fā)內(nèi)存泄漏,所以本文給大家介紹了ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法,需要的朋友可以參考下
    2024-12-12
  • Java基礎(chǔ)教程之獲取操作系統(tǒng)及瀏覽器信息

    Java基礎(chǔ)教程之獲取操作系統(tǒng)及瀏覽器信息

    最近在開發(fā)中需要從request中獲取操作系統(tǒng),瀏覽器及瀏覽器版本信息,所以下面這篇文章主要給的大家介紹了關(guān)于Java基礎(chǔ)教程之獲取操作系統(tǒng)及瀏覽器信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • Spring純注解開發(fā)模式讓開發(fā)簡化更簡化

    Spring純注解開發(fā)模式讓開發(fā)簡化更簡化

    Spring3.0引入了純注解開發(fā)的模式,框架的誕生是為了簡化開發(fā),那注解開發(fā)就是簡化再簡化。Spring的特性在整合MyBatis方面體現(xiàn)的淋漓盡致哦
    2022-08-08
  • Java虛擬機運行時數(shù)據(jù)區(qū)域匯總

    Java虛擬機運行時數(shù)據(jù)區(qū)域匯總

    這篇文章主要給大家介紹了關(guān)于Java虛擬機運行時數(shù)據(jù)區(qū)域的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Idea啟動SpringBoot程序報錯:Veb server failed to start. Port 8082 was already in use;端口沖突的原理與解決方案

    Idea啟動SpringBoot程序報錯:Veb server failed to&nbs

    這篇文章主要介紹了Idea啟動SpringBoot程序報錯:Veb server failed to start. Port 8082 was already in use;端口沖突的原理與解決方案,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Java多線程程序中synchronized修飾方法的使用實例

    Java多線程程序中synchronized修飾方法的使用實例

    synchronized關(guān)鍵字主要北用來進(jìn)行線程同步,這里我們主要來演示Java多線程程序中synchronized修飾方法的使用實例,需要的朋友可以參考下:
    2016-06-06
  • SpringBoot實現(xiàn)文件上傳與下載功能的示例代碼

    SpringBoot實現(xiàn)文件上傳與下載功能的示例代碼

    文件上傳與下載是Web應(yīng)用開發(fā)中常用的功能之一。接下來我們將討論如何在Spring?Boot的Web應(yīng)用開發(fā)中,如何實現(xiàn)文件的上傳與下載,感興趣的可以了解一下
    2022-06-06
  • Java使用云片API發(fā)送短信驗證碼

    Java使用云片API發(fā)送短信驗證碼

    這篇文章主要介紹了Java使用云片API發(fā)送短信驗證碼,主要用的是Java實現(xiàn)短信驗證碼。需要的朋友可以參考下
    2017-02-02
  • java以json格式向后臺服務(wù)器接口發(fā)送請求的實例

    java以json格式向后臺服務(wù)器接口發(fā)送請求的實例

    下面小編就為大家分享一篇java以json格式向后臺服務(wù)器接口發(fā)送請求的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01

最新評論