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

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

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

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

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

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

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

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

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

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

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

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

1.3 Seata介紹

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

bc0cc61d25fa4c23826beb44fef8d661

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

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

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

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

52184aca8dd6493fb0414f4e93ec4092

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

5721efd7a2864c55a36258c8e21987d8

2.2 Seata管理端

下載Seata的最新版本,并解壓后,進(jìn)入seata/bin目錄,啟動(dòng):

sh seata-server.sh 8091 file

觀(guān)察8091端口是否啟動(dòng)。

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

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

f271d4dda274412ca428a20dd2a0c54a

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

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

bbcee56a03a6409a95b9118e5f1c9f93

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

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

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

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

28f545991b414a9eb89d77b9f3b81e46

2,Seata初始化

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

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

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

2.5 測(cè)試

依次啟動(dòng)Seata、springboot-dubbo-storage、springboot-dubbo-order、springboot-dubbo-client后,打開(kāi)postman測(cè)試,配置測(cè)試參數(shù)為:

51a43f20c64d4620b7dee1957c4ec9a8

可以看到,在addOrder報(bào)錯(cuò)后,會(huì)有全局事務(wù)的rollback過(guò)程。

3. 參考資料

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

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

相關(guān)文章

  • Java反射設(shè)置/獲取對(duì)象屬性值三種方式

    Java反射設(shè)置/獲取對(duì)象屬性值三種方式

    這篇文章主要給大家介紹了關(guān)于Java反射設(shè)置/獲取對(duì)象屬性值的三種方式,反射機(jī)制的用途非常多,比如獲取方法,屬性名和屬性值等,甚至可以獲取標(biāo)簽等標(biāo)簽屬性,需要的朋友可以參考下
    2023-11-11
  • Java項(xiàng)目防止SQL注入的幾種方法總結(jié)

    Java項(xiàng)目防止SQL注入的幾種方法總結(jié)

    SQL注入是比較常見(jiàn)的網(wǎng)絡(luò)攻擊方式之一,在客戶(hù)端在向服務(wù)器發(fā)送請(qǐng)求的時(shí)候,sql命令通過(guò)表單提交或者url字符串拼接傳遞到后臺(tái)持久層,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java項(xiàng)目防止SQL注入的幾種方法,需要的朋友可以參考下
    2023-04-04
  • Java?GUI編程菜單組件實(shí)例詳解

    Java?GUI編程菜單組件實(shí)例詳解

    在實(shí)際開(kāi)發(fā)中,除了主界面,還有一類(lèi)比較重要的內(nèi)容就是菜單相關(guān)組件,可以通過(guò)菜單相關(guān)組件很方便的使用特定的功能,今天通過(guò)本文給大家介紹下Java?GUI編程菜單組件實(shí)例詳解,感興趣的朋友一起看看吧
    2022-04-04
  • @Column映射不一致的解決

    @Column映射不一致的解決

    這篇文章主要介紹了@Column映射不一致的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot 異步線(xiàn)程間數(shù)據(jù)傳遞的實(shí)現(xiàn)

    SpringBoot 異步線(xiàn)程間數(shù)據(jù)傳遞的實(shí)現(xiàn)

    本文主要介紹了SpringBoot 異步線(xiàn)程間數(shù)據(jù)傳遞的實(shí)現(xiàn),包括異步線(xiàn)程的基本概念、數(shù)據(jù)傳遞的方式、具體實(shí)現(xiàn)方式等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 簡(jiǎn)單介紹線(xiàn)性表以及如何實(shí)現(xiàn)雙鏈表

    簡(jiǎn)單介紹線(xiàn)性表以及如何實(shí)現(xiàn)雙鏈表

    本文先介紹線(xiàn)性表的幾個(gè)基本組成部分:數(shù)組、單向鏈表、雙向鏈表;隨后給出雙向鏈表的C、C++和Java三種語(yǔ)言的實(shí)現(xiàn),需要的朋友可以參考下
    2015-07-07
  • Java?Spring的使用注解開(kāi)發(fā)詳解

    Java?Spring的使用注解開(kāi)發(fā)詳解

    這篇文章主要為大家介紹了Java?Spring注解開(kāi)發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 關(guān)于feign調(diào)用的參數(shù)傳遞問(wèn)題(@RequestBody和@RequestParam)

    關(guān)于feign調(diào)用的參數(shù)傳遞問(wèn)題(@RequestBody和@RequestParam)

    這篇文章主要介紹了關(guān)于feign調(diào)用的參數(shù)傳遞問(wèn)題(@RequestBody和@RequestParam),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java基礎(chǔ)之?dāng)?shù)組詳解

    Java基礎(chǔ)之?dāng)?shù)組詳解

    這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • nacos使用占位符${}進(jìn)行參數(shù)配置的方法

    nacos使用占位符${}進(jìn)行參數(shù)配置的方法

    這篇文章主要介紹了nacos如何使用占位符${}進(jìn)行參數(shù)配置,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12

最新評(píng)論