• seata分布式事务部署,springCloud集成seata。


    windows下部署seata:

    seata版本:1.4.2
    下载地址:https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html
    此地址中有很多需要的配置东西:
    第一步:先创建seata所需要的数据库。
    sql文件,地址:https://github.com/seata/seata/tree/master/script
    在这里插入图片描述
    我们需要一下数据:
    在这里插入图片描述

    client端:这段SQL需要在你使用的数据库中创建表,用于seata进行回滚使用,多数据库每个数据库中都需要创建。

    -- for AT mode you must to init this sql for you business database. the seata server not need it.
    CREATE TABLE IF NOT EXISTS `undo_log`
    (
        `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
        `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
        `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
        `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
        `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
        `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
        `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
        UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
    ) ENGINE = InnoDB
      AUTO_INCREMENT = 1
      DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    server端:先创建数据库,名称为seata,执行下面sql语句创建出表。

    -- -------------------------------- The script used when storeMode is 'db' --------------------------------
    -- 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_status_gmt_modified` (`status` , `gmt_modified`),
        KEY `idx_transaction_id` (`transaction_id`)
    ) ENGINE = InnoDB
      DEFAULT CHARSET = utf8mb4;
    
    -- 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 = utf8mb4;
    
    -- the table to store lock data
    CREATE TABLE IF NOT EXISTS `lock_table`
    (
        `row_key`        VARCHAR(128) NOT NULL,
        `xid`            VARCHAR(128),
        `transaction_id` BIGINT,
        `branch_id`      BIGINT       NOT NULL,
        `resource_id`    VARCHAR(256),
        `table_name`     VARCHAR(32),
        `pk`             VARCHAR(36),
        `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
        `gmt_create`     DATETIME,
        `gmt_modified`   DATETIME,
        PRIMARY KEY (`row_key`),
        KEY `idx_status` (`status`),
        KEY `idx_branch_id` (`branch_id`),
        KEY `idx_xid_and_branch_id` (`xid` , `branch_id`)
    ) ENGINE = InnoDB
      DEFAULT CHARSET = utf8mb4;
    
    CREATE TABLE IF NOT EXISTS `distributed_lock`
    (
        `lock_key`       CHAR(20) NOT NULL,
        `lock_value`     VARCHAR(20) NOT NULL,
        `expire`         BIGINT,
        primary key (`lock_key`)
    ) ENGINE = InnoDB
      DEFAULT CHARSET = utf8mb4;
    
    INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
    INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
    INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
    INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    数据库准备完毕。

    第二步:下载seata服务和源码包
    在这里插入图片描述
    下载内容:
    在这里插入图片描述
    一、解压后打开源码包:
    在这里插入图片描述
    (1)打开config.text文件进行修改:

    	(1.1):这里要添加自己的分组,后续在每个微服务模块中要对应使用一个。如果这里不写,将不能使用。
    
    • 1

    在这里插入图片描述

    (2.1):修改此文件中的数据库连接配置
    
    • 1

    在这里插入图片描述
    (2):在Nacos上创建命名空间
    在这里插入图片描述(3):修改打开,修改以后双击启动。导入配置到nacos的此命名
    在这里插入图片描述

    (3.1):修改文件中的nacos配置,把上面的命名空间id放到这里的tenant中.
    
    • 1

    在这里插入图片描述
    执行完以后在nacos上可以看到配置信息:
    在这里插入图片描述

    二、解压后打开服务包:
    (1)打开服务包中的file.conf文件
    在这里插入图片描述

    (1.1)进行修改file.conf文件:
    
    • 1

    在这里插入图片描述
    (2)打开服务包中的registry.conf文件
    在这里插入图片描述

    (2.1)进行修改registry.conf文件:
    
    • 1

    在这里插入图片描述
    此处namespace:命名空间是下面这个位置中的唯一标识。

    第三步:启动seata服务:
    在这里插入图片描述

    docker下部署seata:

    第一步:下载并启动seata

    //根据自己需求进行修改
    docker run --name 自定义名称 -p 8091:8091 -p 7091:7091 seataio/seata-server:版本号
    //执行下面这个命令。
    docker run --name cwseataServer -p 8091:8091 -p 7091:7091 seataio/seata-server:1.3.2
    
    • 1
    • 2
    • 3
    • 4

    第二步:拷贝服务中的配置文件到容器外部,进行修改

    //根据自己的seata服务名称进行拷贝
    docker cp 启动时自定义名称:/seata-server /skyvis/seata
    //执行下面命令
    docker cp cwseataServer:/seata-server /skyvis/seata
    
    • 1
    • 2
    • 3
    • 4

    第三步:修改拷贝出来的配置文件,修改内容和windows中的一样。
    在这里插入图片描述
    第四步:执行的windows中,第二步:下载seata服务和源码包中,一、解压后打开源码包:的步骤。

    第五步:从新启动一个容器,使用这个从新启动的容器。

    //根据自己需求修改
    docker run -d --restart always  --name  seata-server -p 8091:8091  -v 把配置文件映射到服务其中的位置 -e SEATA_IP=外不能访问本机的ip -e SEATA_PORT=8091 seataio/seata-server:版本
    
    //执行下面命令
    docker run -d --restart always  --name  seata-server -p 8091:8091  -v /skyvis/seata:/seata-server -e SEATA_IP=127.0.0.1 -e SEATA_PORT=8091 seataio/seata-server:1.4.2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    到这里也就执行完毕了。

    在微服务中的配置:

    application.yml配置

    server:
      port: 10010
    spring:
      application:
        name: kpi-cloud-bonus
    #分布式事务配置
    seata:
      tx-service-group: kpiBounts		#这里要特别注意和nacos中配置的要保持一直,每个模块用不同的分组名称
      registry:
        type: nacos
        nacos:
          server-addr: seata设置的访问ip:8848
          username: nacos
          password: nacos
          group: SEATA_GROUP
      config:
        type: nacos
        nacos:
          server-addr: seata设置的访问ip:8848
          username: nacos
          password: nacos
          group: SEATA_GROUP
          namespace: d16526d7-4fc9-4ea5-833c-5344bed45bb8   #2.2中配置所在命名空间ID,入未配置 默认public空间
      service:
        vgroup-mapping:
          kpiBounts: default		# 这里要特别注意和nacos中配置的要保持一直,每个模块用不同的分组名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    重点:

    其中的kpiBounts名称一定要跟windows中的 一、解压后打开源码包:(1)打开config.text文件进行修改。
    config.text中service.vgroupMapping.xxx一致。
    比如此文件config.text
    config.text中有service.vgroupMapping.kpiBounts。那么在application.yml中就可以使用kpiBounts名称。
    tx-service-group: kpiBounts		#这里要特别注意和nacos中配置的要保持一直,每个模块用不同的分组名称
    service:
       vgroup-mapping:
         kpiBounts: default		# 这里要特别注意和nacos中配置的要保持一直,每个模块用不同的分组名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果不一致或者config.text文件中没有,那么就会报以下错误:
    no available service ‘null‘ found, please make sure registry config correct

  • 相关阅读:
    Mysql和Redis如何保证数据一致性
    Pytorch中 permute、transpose 和 view 、resize函数
    HTML下雪/烟花
    Node.js 应用程序的 Docker 安全最佳实践
    关于UOS系统下打包安装使用的问题总结
    解释 Git 的基本概念和使用方式。
    虚幻引擎图文笔记:动画资源中Force Root Lock的作用
    掌握Python库的Bokeh,就能让你的交互炫目可视化
    Selenium—入门+案例
    交换两数整有几种途径
  • 原文地址:https://blog.csdn.net/qq_41972358/article/details/126385298