国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SpringCloud整合Seata實現(xiàn)分布式事務(wù)通過nacos實現(xiàn)注冊和配置

開發(fā) 前端
什么是配置中心?配置中心可以說是一個"大衣柜",內(nèi)部放置著各種配置文件,你可以通過自己所需進行獲取配置加載到對應(yīng)的客戶端.比如Seata Client端(TM,RM),Seata Server(TC),會去讀取全局事務(wù)開關(guān),事務(wù)會話存儲模式等信息.

環(huán)境:springboot2.3.11.RELEASE + spring cloud Hoxton.SR8 + spring cloud alibaba 2.2.5.RELEASE + seata1.3.0

前提:安裝并啟動了nacos服務(wù)

Seata注冊中心及配置中心說明

配置中心

什么是配置中心?配置中心可以說是一個"大衣柜",內(nèi)部放置著各種配置文件,你可以通過自己所需進行獲取配置加載到對應(yīng)的客戶端.比如Seata Client端(TM,RM),Seata Server(TC),會去讀取全局事務(wù)開關(guān),事務(wù)會話存儲模式等信息.

Seata的配置中心與Spring cloud的配置中心區(qū)別是?在廣義上來說,并無區(qū)別,只不過Spring cloud的配置中心僅是作用于它們自身的組件,而Seata的配置中心也是一樣是作用于Seata自身.(注:Spring cloud的配置中心與Seata無關(guān))

注冊中心

什么是注冊中心?注冊中心可以說是微服務(wù)架構(gòu)中的”通訊錄“,它記錄了服務(wù)和服務(wù)地址的映射關(guān)系。在分布式架構(gòu)中,服務(wù)會注冊到這里,當服務(wù)需要調(diào)用其它服務(wù)時,就到這里找到服務(wù)的地址,進行調(diào)用.比如Seata Client端(TM,RM),發(fā)現(xiàn)Seata Server(TC)集群的地址,彼此通信.

Seata的注冊中心與Dubbo,Spring cloud的注冊中心區(qū)別是?在廣義上來說,并無區(qū)別,只不過Dubbo與Spring cloud的注冊中心僅是作用于它們自身的組件,而Seata的注冊中心也是一樣是作用于Seata自身.(注:Dubbo與Spring cloud的注冊中心與Seata無關(guān))

Seata服務(wù)配置

1、在%SEATA_HOME%目錄下新建config.txt文件

service.vgroupMapping.dt-group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&serverTimezone=GMT%2B8
store.db.user=root
store.db.password=xxxxxx
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

2、執(zhí)行腳本

通過如下地址下載腳本執(zhí)行

圖片

在windows系統(tǒng)下可以通過 git bash 來執(zhí)行shell腳本

sh nacos-config.sh -h nacos的ip -p nacos端口 -g nacos配置文件的組 -t 你的namespace號(若是public可省略此選項) -u nacos用戶名 -w nacos密碼

3、數(shù)據(jù)庫初始化腳本

CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `context` varchar(128) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  `ext` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;


-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;


-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(96),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

完成以上步驟后查看nacos配置

接下來進行項目開發(fā)及配置接下來進行項目開發(fā)及配置

項目結(jié)構(gòu)

圖片圖片

兩個子模塊:

dt-account-service 用戶模塊
dt-storage-service 庫存模塊

父工程依賴

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <exclusions>
      <exclusion>
        <groupId>io.seata</groupId>
        <artifactId>seata-all</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>${seata.version}</version>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring-cloud-alibaba.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

account帳號模塊

核心配置文件

spring:
  cloud:
    nacos:
      password: nacos
      username: nacos
      discovery:
        server-addr: 118.24.111.33:8848
        namespace: ""
        group: dt-group
---
seata:
  tx-service-group: dt-group
  registry:
    type: nacos
    nacos:
      application: seata-server #這里要與seata中的registry.conf配置的application一致
      group: dt-group
      namespace: ""
      server-addr: 118.24.111.33:8848
      username: nacos
      password: nacos
  config:
    type: nacos
    nacos:
      namespace: ""
      group: dt-group
      server-addr: 118.24.111.33:8848
      username: nacos
      password: nacos

AccountService服務(wù)類

@Service
public class AccountService {


  private static final String ERROR_USER_ID = "1002";
  @Resource
  private AccountMapper accountMapper ;
  @Resource
  private StorageFeignClient storageFeignClient;


  @Transactional(rollbackFor = Exception.class)
  @GlobalTransactional
  public void debit(String userId, BigDecimal num, String commodityCode, int orderCount) {
    System.out.println(RootContext.getXID()) ;
    accountMapper.updateAccount(num, userId) ;
    storageFeignClient.deduct(commodityCode, orderCount);
    try {
      TimeUnit.MILLISECONDS.sleep(new Random().nextInt(100)) ;
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
        
    if (ERROR_USER_ID.equals(userId)) {
      throw new RuntimeException("account branch exception");
    }
  }
    
}

這里模擬了拋出異常當輸入的userId為1002時拋出異常,就為了測試所有服務(wù)的事務(wù)是否回滾了。注意這里需要添加@GlobalTransactional注解

Feign接口

@FeignClient(name = "storage-service", url = "127.0.0.1:8802")
public interface StorageFeignClient {


  @GetMapping("/storage/deduct")
  void deduct(@RequestParam("commodityCode") String commodityCode, @RequestParam("count") Integer count);


}

storage庫存子模塊

該子模塊的配置與account模塊的配置基本一致

StorageService

@Service
public class StorageService {
  @Resource
  private StorageMapper storageMapper ;


  @Transactional
  public void deduct(String commodityCode, int count) {
    System.out.println(RootContext.getXID()) ;
    storageMapper.updateStorage(count, commodityCode) ;
  }
}

測試

啟動seata,nacos,account,storage服務(wù)后查看nacos

圖片圖片


seata服務(wù)也已經(jīng)注冊上來了。

數(shù)據(jù)庫初始化數(shù)據(jù)

圖片圖片


圖片圖片

正常請求

圖片圖片

數(shù)據(jù)變化

圖片圖片


當傳入userId=1002時

圖片圖片


account模塊控制臺

圖片圖片


storage模塊控制臺

圖片圖片


數(shù)據(jù)庫數(shù)據(jù)

圖片圖片


數(shù)據(jù)沒有任何變化說明回滾了

責(zé)任編輯:武曉燕 來源: 實戰(zhàn)案例錦集
相關(guān)推薦

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2020-12-09 09:14:57

SpringCloudSeata 分布式

2023-01-06 09:19:12

Seata分布式事務(wù)

2022-06-21 08:27:22

Seata分布式事務(wù)

2022-03-24 07:51:27

seata分布式事務(wù)Java

2021-08-06 08:33:27

Springboot分布式Seata

2020-04-28 12:18:08

Seata模式分布式

2022-07-10 20:24:48

Seata分布式事務(wù)

2022-01-12 10:02:02

TCC模式 Seata

2024-10-09 14:14:07

2021-04-23 08:15:51

Seata XA AT

2025-04-30 10:44:02

2024-01-26 08:18:03

2023-11-06 13:15:32

分布式事務(wù)Seata

2020-03-31 08:05:23

分布式開發(fā)技術(shù)

2023-08-17 10:23:07

擴展方案

2024-08-19 09:05:00

Seata分布式事務(wù)

2022-10-26 17:28:41

分布式事務(wù)seata

2025-04-28 00:44:04

2022-07-03 14:03:57

分布式Seata
點贊
收藏

51CTO技術(shù)棧公眾號

91精品麻豆日日躁夜夜躁| 精品久久国产97色综合| 91精品中文在线| 天堂在线中文网官网| 国产精品免费丝袜| 亚洲图片欧洲图片日韩av| 成人免费看片39| 在线精品国产欧美| 日本在线免费| 一区二区三区欧美亚洲| 懂色av粉嫩av蜜臀av| 欧美性久久久| 性欧美暴力猛交69hd| 欧美巨大丰满猛性社交| 一本大道综合伊人精品热热| 99免费视频观看| 免费成人你懂的| 91在线免费看片| 欧美18xxxx| 亚洲毛片在线看| h片在线播放| 在线观看国产精品网站| 性史性dvd影片农村毛片| 久久久精品欧美丰满| 男插女免费视频| 天堂成人免费av电影一区| 91精品久久久久久久久青青| 一区三区自拍| 久久久av免费| 91超碰碰碰碰久久久久久综合| 在线观看国产一区二区| 日本午夜视频| 综合av第一页| 日本加勒比高清在线| 国产亚洲欧美中文| 成年人免费在线播放| 国产999精品久久| 国产精品波多野结衣| 日韩成人av影视| 欧美中文娱乐网| 亚洲欧美日韩国产| 久久国产精品99久久久久久丝袜| 欧美在线1区| 99久久免费国| 伊人久久大香线蕉综合热线 | 成人在线播放网站| 久久久综合网站| 密臀av一区二区三区| 91蜜桃免费观看视频| 日本福利视频在线| 久久久一区二区三区捆绑**| 免费观看成人网| 久久久久久久久99精品| 国产福利一区视频| 亚洲精品视频观看| 免费在线国产| 欧美日韩国产小视频在线观看| 欧美成人性生活视频| 欧美一卡在线观看| 草草视频在线| 大胆人体色综合| 国内精品国产成人国产三级粉色| 国语自产偷拍精品视频偷| 国产成人三级| 亚洲最大福利网站| 水蜜桃久久夜色精品一区的特点| 一区二区三区欧美在线| 成人教育av在线| 91美女在线免费观看| 欧美视频精品一区| caoprom在线| 美女视频久久黄| av中字幕久久| 久久久久成人精品免费播放动漫| 久久国产精品99久久久久久老狼| av高清在线免费观看| 亚洲色图丝袜美腿| 成人福利在线| 亚洲视屏在线播放| 色天天色综合| 久久99精品国产一区二区三区| 毛片不卡一区二区| 免费国产成人av| 欧美午夜视频网站| 成人软件在线观看| 日本精品视频网站| 老司机精品久久| 日韩 欧美 高清| 日韩欧美在线视频观看| 男人久久天堂| 国产精品久久久999| 麻豆亚洲精品| 小泽玛利亚视频在线观看| 精品高清美女精品国产区| 捆绑调教日本一区二区三区| 欧美在线一区二区视频| 日本不卡一区二区| 黄色一级影院| 亚洲欧美日韩爽爽影院| 99精品全国免费观看视频软件| 99久re热视频精品98| 亚洲成a人v欧美综合天堂下载| 亚洲精品日产| 成人亚洲激情网| 26uuu亚洲| www免费在线观看| 2019精品视频| 国产麻豆精品theporn| 中文字幕在线一二| 久久精品视频在线观看| 亚洲欧洲综合| 日韩欧美国产二区| 中文字幕在线不卡国产视频| 波多野结衣久久| 在线精品国精品国产尤物884a| 搜成人激情视频| 国产日韩欧美自拍| 国产99久久久国产精品潘金| 亚乱亚乱亚洲乱妇| 欧美成人免费在线观看| 亚洲黄色一区| 一区二区成人网| 欧美一区二区成人6969| 精品视频一区二区三区在线观看| 免费av在线一区二区| 中文字幕+乱码+中文字幕一区| a天堂在线资源| 国语自产在线不卡| 精品一二三四在线| 亚洲伦理电影| 九九视频这里只有精品| 久久婷婷亚洲| 一区二区三区视频国产日韩 | 久久精品视频免费观看| 蜜桃视频网站在线| 秋霞av国产精品一区| 成人激情黄色小说| av中文字幕在线观看| 国产精品极品尤物在线观看| 国产91精品一区二区麻豆亚洲| 黄色大片在线免费观看| 久久国产精品网站| 日本一不卡视频| 国产精品一区二区婷婷| 97视频在线观看亚洲| 国产精品99久久久久久久女警 | 国产日韩欧美在线一区| 蜜桃视频在线观看www社区 | 久久伊人精品| 欧美一区二区三区成人久久片 | 国产男女在线观看| 日韩午夜在线观看视频| 欧美丝袜激情| 我看黄色一级片| 伊人激情综合网| 国产精品综合在线视频| 麻豆免费在线视频| 波多野结衣成人在线| 一个色综合av| 欧美丝袜美腿| 国产极品在线视频| 日韩av中文字幕在线播放| 激情久久综合| 黄色视屏网站在线免费观看| 国产精品电影网站| 亚洲人吸女人奶水| 黄色欧美网站| 手机在线看福利| 久久影视免费观看| 丁香桃色午夜亚洲一区二区三区| av伦理在线| 欧美日韩在线精品| 337p亚洲精品色噜噜| 欧美在线二区| 26uuu亚洲电影在线观看| 国产精品手机在线| 欧美精品一二三| 国产一级久久| 成人午夜在线影视| www.成人三级视频| 日韩精品一区二区三区在线观看 | 亚洲一区二区久久| 久久er99精品| 欧美va在线观看| 黄色片网址在线观看| 日韩视频免费观看| 成a人片国产精品| 欧美日韩黄色| 99不卡视频| 亚洲影院色无极综合| 欧美系列在线观看| 亚洲在线观看| 欧美色网在线| a√天堂在线观看| 午夜精品久久久久久久99热| 亚洲最大色网站| 99日韩精品| 欧美艳星kaydenkross| 已婚少妇美妙人妻系列| 国产精品女主播|