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