SpringCloud集成Seata以及nacos

 

一、本文通過微服務 feign調用的模式,集成seata和nacos 以及具體使用

下載已有開源代碼(包含已經實現的接口,看效果即可)

1. 接口實現調用方式如下:

 

2. 源碼下載地址

https://github.com/YunaiV/SpringBoot-Labs   裏面的 labx-17  代碼

 

二、創建數據庫

# Order
DROP DATABASE IF EXISTS seata_order;
CREATE DATABASE seata_order;

CREATE TABLE seata_order.orders
(
    id               INT(11) NOT NULL AUTO_INCREMENT,
    user_id          INT(11)        DEFAULT NULL,
    product_id       INT(11)        DEFAULT NULL,
    pay_amount       DECIMAL(10, 0) DEFAULT NULL,
    add_time         DATETIME       DEFAULT CURRENT_TIMESTAMP,
    last_update_time DATETIME       DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

CREATE TABLE seata_order.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,
    PRIMARY KEY (id),
    UNIQUE KEY ux_undo_log (xid, branch_id)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

# Product
DROP DATABASE IF EXISTS seata_product;
CREATE DATABASE seata_product;

CREATE TABLE seata_product.product
(
    id               INT(11) NOT NULL AUTO_INCREMENT,
    stock            INT(11)  DEFAULT NULL,
    last_update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
INSERT INTO seata_product.product (id, stock) VALUES (1, 10); # 插入一條產品的庫存

CREATE TABLE seata_product.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,
    PRIMARY KEY (id),
    UNIQUE KEY ux_undo_log (xid, branch_id)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

# Account
DROP DATABASE IF EXISTS seata_account;
CREATE DATABASE seata_account;

CREATE TABLE seata_account.account
(
    id               INT(11) NOT NULL AUTO_INCREMENT,
    balance          DOUBLE   DEFAULT NULL,
    last_update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE = InnoDB AUTO_INCREMENT = 1  DEFAULT CHARSET = utf8;

CREATE TABLE seata_account.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,
    PRIMARY KEY (id),
    UNIQUE KEY ux_undo_log (xid, branch_id)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
INSERT INTO seata_account.account (id, balance) VALUES (1, 10);

 

三、修改三個服務中的配置yaml文件,修改爲你自己的數據庫和nacos配置,我的是修改後的配置,供參考,可覆蓋使用

server:
  port: 8083

spring:
  application:
    name: account-service

  datasource:
    url: jdbc:mysql://192.168.28.134:3306/seata_account?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456

  cloud:
    # Nacos 作爲註冊中心的配置項
    nacos:
      discovery:
        server-addr: 192.168.28.134:8848

# Seata 配置項,對應 SeataProperties 類
seata:
  application-id: account-service # Seata 應用編號,默認爲 ${spring.application.name}
  tx-service-group: my_test_tx_group # Seata 事務組編號,用於 TC 集羣名
  # Seata 服務配置項,對應 ServiceProperties 類
  config:
    type: nacos
    nacos:
      group: SEATA_GROUP
      namespace:
      server-addr: 192.168.28.134:8848
  service:
    # 虛擬組和分組的映射
    vgroup-mapping:
      my_test_tx_group: default
  # Seata 註冊中心配置項,對應 RegistryProperties 類
  registry:
    type: nacos # 註冊中心類型,默認爲 file
    nacos:
      cluster: default # 使用的 Seata 分組
      namespace: # Nacos 命名空間
      serverAddr: 192.168.28.134:8848 # Nacos 服務地址
  enabled: true

 注意上面的seata配置裏面, tx-service-group: my_test_tx_group , my_test_tx_group這裏要和nacos中的值保持一致,對應

的nacos seata配置key爲 :service.vgroupMapping.my_test_tx_group

不一致會報錯。

 

四、 具體演示效果請參考

http://www.iocoder.cn/Spring-Cloud-Alibaba/Seata/?self    下  3. AT 模式 + Feign

 

特此記錄demo運行過程中碰到的問題和成功步驟。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章