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

本文详细介绍了如何在Windows环境中以及通过Docker容器部署Seata服务,包括创建Seata所需数据库、下载与配置Seata服务、修改配置文件以及启动Seata服务的步骤。同时,讲解了在微服务中配置Seata的相关参数,确保服务间分布式事务的正确运行。在部署过程中,强调了配置文件中的分组名称和服务组配置必须保持一致以避免错误。
摘要由CSDN通过智能技术生成

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';

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);

数据库准备完毕。

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

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

在这里插入图片描述

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

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

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

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

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

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

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

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

在这里插入图片描述
此处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

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

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

第三步:修改拷贝出来的配置文件,修改内容和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

到这里也就执行完毕了。

在微服务中的配置:

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中配置的要保持一直,每个模块用不同的分组名称

重点:

其中的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中配置的要保持一直,每个模块用不同的分组名称

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值