最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解SpringBoot基于Dubbo和Seata的分布式事務(wù)解決方案

 更新時間:2020年10月10日 09:47:08   作者:wx5d30212829a35  
這篇文章主要介紹了詳解SpringBoot基于Dubbo和Seata的分布式事務(wù)解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 分布式事務(wù)初探

一般來說,目前市面上的數(shù)據(jù)庫都支持本地事務(wù),也就是在你的應(yīng)用程序中,在一個數(shù)據(jù)庫連接下的操作,可以很容易的實現(xiàn)事務(wù)的操作。

但是目前,基于SOA的思想,大部分項目都采用微服務(wù)架構(gòu)后,就會出現(xiàn)了跨服務(wù)間的事務(wù)需求,這就稱為分布式事務(wù)

本文假設(shè)你已經(jīng)了解了事務(wù)的運行機制,如果你不了解事務(wù),那么我建議先去看下事務(wù)相關(guān)的文章,再來閱讀本文。

1.1 什么是分布式事務(wù)

對于傳統(tǒng)的單體應(yīng)用而言,實現(xiàn)本地事務(wù)可以依賴Spring的@Transactional注解標(biāo)識方法,實現(xiàn)事務(wù)非常簡單。

我們以最常見的電商系統(tǒng)為例,簡單拆分為用戶客戶端、訂單服務(wù)、庫存服務(wù)、商品服務(wù)等等,在用戶下單過程中,需要同時調(diào)用各個服務(wù),但是,每個服務(wù)都是獨立部署的,數(shù)據(jù)庫連接是不共享的,因此要保證這些操作全部執(zhí)行,或者全部不執(zhí)行,就需要分布式事務(wù)的支持。

1.2 分布式事務(wù)解決方案

  • 全局事務(wù),基于DTP模型實現(xiàn),需要三種角色即Application 應(yīng)用系統(tǒng),Transaction Manager 事務(wù)管理器,Resource Manager資源管理器;
  • 基于可靠消息服務(wù)的分布式事務(wù),通過消息隊列實現(xiàn)事務(wù)的一致性;
  • TCC,即Try、Confirm、Cancel,屬于補償型分布式事務(wù),Try:嘗試待執(zhí)行的事務(wù),Confirm:執(zhí)行事務(wù),Cancel:取消執(zhí)行的事務(wù);

1.3 Seata介紹

Seata 是一款開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡單易用的分布式事務(wù)服務(wù)。Seata 于2019.1正式對外開源,前身是阿里巴巴2014年誕生的 TXC(Taobao Transaction Constructor)。以下是Seata官網(wǎng)介紹的特色服務(wù):

bc0cc61d25fa4c23826beb44fef8d661

Seata 將為用戶提供了 AT、TCC 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案。更多關(guān)于Seata的介紹,可參考其官網(wǎng)。

2. Spring Boot,Dubbo和Seata實現(xiàn)分布式事務(wù)案例

2.1 環(huán)境準(zhǔn)備

運行本測試,需要你提前準(zhǔn)備如下的軟件運行環(huán)境:

52184aca8dd6493fb0414f4e93ec4092

本案例,主要模仿簡單的下單扣減庫存的過程,架構(gòu)圖如下:

5721efd7a2864c55a36258c8e21987d8

2.2 Seata管理端

下載Seata的最新版本,并解壓后,進入seata/bin目錄,啟動:

sh seata-server.sh 8091 file

觀察8091端口是否啟動。

2.3 數(shù)據(jù)存儲

本測試服務(wù),需要創(chuàng)建兩張表,分別是訂單表和庫存表:

f271d4dda274412ca428a20dd2a0c54a

2.4 構(gòu)建Spring Boot服務(wù)

示例代碼可參考Github倉庫,倉庫的目錄結(jié)構(gòu)如下:

bbcee56a03a6409a95b9118e5f1c9f93

  • springboot-base:存儲公共調(diào)用的基類接口,mapper接口,Model層的類等,可mvn install后,供另外三個module調(diào)用。
  • springboot-dubbo-storage:庫存服務(wù);
  • springboot-dubbo-order:訂單服務(wù);
  • springboot-dubbo-client:RPC消費者,提供對外接口;

基于Spring Boot構(gòu)建Dubbo服務(wù)可參考之前的博文《Spring Boot(五)之集成Dubbo部署RPC服務(wù)》,構(gòu)建本項目的過程就不再贅述了。

加入Seata組件后,與普通Dubbo項目的不同之處在于

1,配置Seata數(shù)據(jù)源

28f545991b414a9eb89d77b9f3b81e46

2,Seata初始化

/**
 * 配置全局事務(wù)掃描器。有兩個參數(shù),一個是應(yīng)用名稱,一個是事務(wù)分組
 *
 * @return
 */
@Bean
public GlobalTransactionScanner globalTransactionScanner() {
  return new GlobalTransactionScanner("springboot-dubbo-storage", "my_test_tx_group");
}

3,配置注冊中心,目前可用的配置中心有file、nacos 、apollo、zk、consul,file類型本身不具備注冊中心的動態(tài)發(fā)現(xiàn)和動態(tài)配置功能,官方的初衷是在不依賴第三方配置注冊中心的基礎(chǔ)上快速集成測試seata功能。配置內(nèi)容在file.conf和registry.conf。

4,注解標(biāo)記事務(wù)方法,在需要分布式事務(wù)的方法上,加上@GlobalTransactional注解即可。

2.5 測試

依次啟動Seata、springboot-dubbo-storage、springboot-dubbo-order、springboot-dubbo-client后,打開postman測試,配置測試參數(shù)為:

51a43f20c64d4620b7dee1957c4ec9a8

可以看到,在addOrder報錯后,會有全局事務(wù)的rollback過程。

3. 參考資料

  • Seata
  • 如何使用Seata保證Dubbo微服務(wù)間的一致性
  • SpringBoot+Dubbo+Seata分布式事務(wù)實戰(zhàn)
  • 分布式事務(wù)選型的取舍
  • 常用的分布式事務(wù)解決方案

到此這篇關(guān)于詳解SpringBoot基于Dubbo和Seata的分布式事務(wù)解決方案的文章就介紹到這了,更多相關(guān)SpringBoot 分布式事務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java向數(shù)據(jù)庫中插入數(shù)據(jù)后獲取自增ID的常用方法

    Java向數(shù)據(jù)庫中插入數(shù)據(jù)后獲取自增ID的常用方法

    有時候因為新增的需求需要獲取剛剛新增的數(shù)據(jù)的自增的主鍵ID,下面這篇文章主要給大家介紹了關(guān)于Java向數(shù)據(jù)庫中插入數(shù)據(jù)后獲取自增ID的常用方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 詳解RocketMQ 消費端如何監(jiān)聽消息

    詳解RocketMQ 消費端如何監(jiān)聽消息

    這篇文章主要為大家介紹了RocketMQ 消費端如何監(jiān)聽消息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • JavaWeb Servlet實現(xiàn)網(wǎng)頁登錄功能

    JavaWeb Servlet實現(xiàn)網(wǎng)頁登錄功能

    這篇文章主要為大家詳細介紹了JavaWeb Servlet實現(xiàn)網(wǎng)頁登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 在Mybatis使用Integer與''進行比較的坑及解決

    在Mybatis使用Integer與''進行比較的坑及解決

    這篇文章主要介紹了在Mybatis使用Integer與''進行比較的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java中instanceof和getClass()的區(qū)別分析

    java中instanceof和getClass()的區(qū)別分析

    本篇文章介紹了,在java中instanceof和getClass()的區(qū)別分析。需要的朋友參考下
    2013-04-04
  • java 集合之實現(xiàn)類ArrayList和LinkedList的方法

    java 集合之實現(xiàn)類ArrayList和LinkedList的方法

    下面小編就為大家?guī)硪黄猨ava 集合之實現(xiàn)類ArrayList和LinkedList的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java中ArrayList的使用詳細介紹

    Java中ArrayList的使用詳細介紹

    這篇文章主要介紹了Java中ArrayList的使用,本文給大家詳細講述該相關(guān)的知識點,并且會通過大量的案例加以說明,需要的朋友可以參考一下
    2022-04-04
  • java中枚舉原來還可以這么用

    java中枚舉原來還可以這么用

    這篇文章主要給大家介紹了關(guān)于java枚舉原來還可以這么用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java8 Stream flatmap中間操作用法解析

    Java8 Stream flatmap中間操作用法解析

    這篇文章主要介紹了Java8 Stream flatmap中間操作用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 淺談JAVA 內(nèi)存流的實現(xiàn)

    淺談JAVA 內(nèi)存流的實現(xiàn)

    這篇文章主要介紹了淺談JAVA 內(nèi)存流的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論

南汇区| 福建省| 行唐县| 融水| 南通市| 会理县| 玉龙| 湘西| 长顺县| 萍乡市| 青川县| 炉霍县| 类乌齐县| 泉州市| 宜春市| 扎鲁特旗| 岳西县| 寻甸| 吴忠市| 罗田县| 临邑县| 泰顺县| 汉沽区| 买车| 石渠县| 南城县| 达尔| 贺州市| 石狮市| 凤山市| 禹城市| 阿克陶县| 张家界市| 新巴尔虎左旗| 石首市| 南宫市| 开封市| 镇坪县| 宁南县| 馆陶县| 砀山县|