SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)

SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X nacos 2.1.X Mysql 8.0.X

  • 前言
  • 服务器的部署
    • docker安装并启动mysql 8.0.18
      • 一、获取mysql 镜像
      • 二、准备mysql 映射
      • 三、启动mysql 镜像
    • docker安装并启动nacos 2.1.0
      • 一、获取nacos 镜像
      • 二、准备nacos 映射(为了持久化)
      • 三、启动nacos 镜像
    • docker安装并启动seata 1.5.2
      • 一、获取seata 镜像
      • 二、准备seata 映射
      • 三、启动seata 镜像
  • 客户端的部署
    • 客户端的准备
      • 一、客户端的依赖准备(`pom.xml`)
      • 二、 客户端的配置文件(`application.yaml`)
    • Nacos上的对Client的配置文件
      • 一、Nacos上 创建每个client的配置文件
      • 二、Nacos编写配置内容(每个都需要写)
    • 客户端的启动
      • 一、Client的启动类
      • 二、Seata在服务层的注解
      • 三、启动成功
  • 总结

前言

Hello,大家好。最近在学习搭建seata去处理分布式事务中遇到了很多问题,搜了很多文章尝试了很多种方式终于才成功解决。这里我将自己成功部署并运行的配置过程分享给大家,希望能对大家有所帮助。由于我也是个小白,用词可能不够专业,配置过程可能也有点小笨,希望大家能指出不足或者提出问题,一起探讨。

服务器的部署

docker安装并启动mysql 8.0.18

一、获取mysql 镜像

打开powershell运行使用指令,将mysql 8.0.18的镜像下载下来:

docker pull mysql:8.0.18

在这里插入图片描述

二、准备mysql 映射

1、在windows下准备以下文件,位置根据自己喜好而定:
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第1张图片
2、在conf文件下准备文件my.conf
在这里插入图片描述
my.conf文件内容如下:

[mysqld]
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=1
 
#服务端口号 默认3306
port=3306
 
#mysql安装根目录(default /usr)
#basedir=/usr/local/mysql
 
#mysql数据文件所在位置
datadir=/var/lib/mysql
 
#pid
pid-file=/var/run/mysqld/mysqld.pid
 
#设置socke文件所在目录
socket=/var/lib/mysql/mysql.sock
 
#设置临时目录
#tmpdir=/tmp
 
# 用户
user=mysql
 
# 允许访问的IP网段
bind-address=0.0.0.0
 
# 跳过密码登录
#skip-grant-tables
 
#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
#skip-external-locking
 
#只能用IP地址检查客户端的登录,不用主机名
#skip_name_resolve=1
 
#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
#transaction_isolation=READ-COMMITTED
 
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server=utf8mb4
 
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
 
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
 
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1
 
#最大连接数
max_connections=400
 
#最大错误连接数
max_connect_errors=1000
 
#TIMESTAMP如果没有显示声明NOT NULL,允许NULL
explicit_defaults_for_timestamp=true
 
#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet=128M
 
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout=1800
wait_timeout=1800
 
#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size=134217728
max_heap_table_size=134217728
 
#禁用mysql的缓存查询结果集功能
#后期根据业务情况测试决定是否开启
#大部分情况下关闭下面两项
#query_cache_size = 0
#query_cache_type = 0
 
#数据库错误日志文件
#log-error=/var/log/mysqld.log
 
#慢查询sql日志设置
#slow_query_log=1
#slow_query_log_file=/var/log/mysqld_slow.log
 
#检查未使用到索引的sql
log_queries_not_using_indexes=1
 
#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes=5
 
#作为从库时生效,从库复制中如何有慢sql也将被记录
log_slow_slave_statements=1
 
#慢查询执行的秒数,必须达到此值可被记录
long_query_time=8
 
#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit=100
 
#mysql binlog日志文件保存的过期时间,过期后自动删除
#expire_logs_days=5
binlog_expire_logs_seconds=604800

三、启动mysql 镜像

打开powershell运行使用以下指令(在使用以下指令时,最好不要直接复制使用,powershell可能会报错,先打开记事本将格式调整一下,需要先把注释删掉,缩进换行全部取消,再放进powershell运行)

docker run -d -p 3306:3306 --privileged=true 
--net mynet --ip 172.18.1.30  /*--mynet是使用了docker的自定义网桥
							  	--这样可以让你的mysql地址固定
							    --目的是为了能让nacos,seata,mysql能够互相访问*/
-v d:\docker\mysql\log/*你刚才创建文件的位置*/:/var/log/mysql 
-v d:\docker\mysql\data/*你刚才创建文件的位置*/:/var/lib/mysql 
-v d:\docker\mysql\conf\my.cnf/*你刚才创建文件的位置*/:/etc/my.cnf 
-e MYSQL_ROOT_PASSWORD=abc123 /*你的数据库密码*/ 
--name mysql/*你给这个mysql取的名字*/ mysql:8.0.18/*mysql镜像的名字加版本号*/

至此,mysql启动成功
在这里插入图片描述

docker安装并启动nacos 2.1.0

一、获取nacos 镜像

打开powershell运行使用指令,将nacos 2.1.0的镜像下载下来:

/*下载nacos 2.1.0的镜像*/
docker pull nacos/nacos-server:2.1.0
/*给镜像重命名为自己喜欢的名字*/
docker tags nacos/nacos-server:2.1.0 nacos:2.1.0

在这里插入图片描述

二、准备nacos 映射(为了持久化)

1、在windows下准备以下文件,位置根据自己喜好而定:
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第2张图片

2、根据Nacos官方文档要求,需要准备数据库,所以我们先在我们的数据库下创建一个数据库
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第3张图片
然后再选中这个数据库,运行以下指令

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(50) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE `users` (
	`username` varchar(50) NOT NULL PRIMARY KEY,
	`password` varchar(500) NOT NULL,
	`enabled` boolean NOT NULL
);

CREATE TABLE `roles` (
	`username` varchar(50) NOT NULL,
	`role` varchar(50) NOT NULL,
	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(255) NOT NULL,
    `action` varchar(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

完成效果如下:
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第4张图片

3、数据库准备好了,回到刚才windows下创建的文件,在conf文件下继续创建一个文件application.properties,用作nacos的配置文件
在这里插入图片描述
application.properties文件的内容如下:(官网全新未更改版本)

# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user=${MYSQL_SERVICE_USER}
db.password=${MYSQL_SERVICE_PASSWORD}
### The auth system to use, currently only 'nacos' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}


### The token expiration in seconds:
nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}

### The default token:
nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}

### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
# default current work dir
server.tomcat.basedir=
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false

nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

我们需要更改的位置为:
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第5张图片

三、启动nacos 镜像

打开powershell运行使用以下指令(在使用以下指令时,最好不要直接复制使用,powershell可能会报错,先打开记事本将格式调整一下,需要先把注释删掉,缩进换行全部取消,再放进powershell运行)

docker run -d -e MODE=standalone
--net mynet --ip 172.18.1.48 /*--mynet是使用了docker的自定义网桥
							  	--这样可以让你的mysql地址固定
							    --目的是为了能让nacos,seata,mysql能够互相访问*/
-p 8848:8848 -p 9848:9848 -p 9849:9849 
-v d:\docker\nacos\nacos_standalone\logs/*你刚才创建文件的位置*/:/home/nacos/logs 
-v d:\docker\nacos\nacos_standalone\data/*你刚才创建文件的位置*/:/home/nacos/data 
-v d:\docker\nacos\nacos_standalone\conf\application.properties/*你刚才创建文件的位置*/:/home/nacos/conf/application.properties
 --name nacos_standalone /*你给这个nacos取的名字*/ nacos:2.1.0/*nacos镜像的名字加版本号*/

至此,nacos启动成功
在这里插入图片描述

docker安装并启动seata 1.5.2

一、获取seata 镜像

打开powershell运行使用指令,将seata 1.5.2的镜像下载下来:

/*下载seata 1.5.2的镜像*/
docker pull seataio/seata-server:1.5.2
/*给镜像重命名为自己喜欢的名字*/
docker tags seataio/seata-server:1.5.2 seata:1.5.2

在这里插入图片描述

二、准备seata 映射

1、在windows下准备以下文件,位置根据自己喜好而定:
在这里插入图片描述

2、根据Seata官方文档要求,需要准备数据库,所以我们先在我们的数据库下创建一个数据库
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第6张图片

然后再选中这个数据库,运行以下指令

-- -------------------------------- 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` (`xid`)
) 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);

完成效果如下:
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第7张图片

3、数据库准备好了,回到刚才windows下创建的文件,在resources文件下继续创建一个文件application.yml,用作seata的配置文件
在这里插入图片描述

application-example.yml文件的内容如下:(官网全新未更改版本)

server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${user.home}/logs/seata
  extend:
    logstash-appender:
      destination: 127.0.0.1:4560
    kafka-appender:
      bootstrap-servers: 127.0.0.1:9092
      topic: logback_to_logstash

seata:
  config:
    # support: nacos 、 consul 、 apollo 、 zk  、 etcd3
    type: file
    nacos:
      server-addr: 127.0.0.1:8848
      namespace:
      group: SEATA_GROUP
      username:
      password:
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
      data-id: seataServer.properties
    consul:
      server-addr: 127.0.0.1:8500
      acl-token:
      key: seata.properties
    apollo:
      appId: seata-server
      apollo-meta: http://192.168.1.204:8801
      apollo-config-service: http://192.168.1.204:8080
      namespace: application
      apollo-access-key-secret:
      cluster: seata
    zk:
      server-addr: 127.0.0.1:2181
      session-timeout: 6000
      connect-timeout: 2000
      username:
      password:
      node-path: /seata/seata.properties
    etcd3:
      server-addr: http://localhost:2379
      key: seata.properties
  registry:
    # support: nacos 、 eureka 、 redis 、 zk  、 consul 、 etcd3 、 sofa
    type: file
    preferred-networks: 30.240.*
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace:
      cluster: default
      username:
      password:
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
    eureka:
      service-url: http://localhost:8761/eureka
      application: default
      weight: 1
    redis:
      server-addr: localhost:6379
      db: 0
      password:
      cluster: default
      timeout: 0
    zk:
      cluster: default
      server-addr: 127.0.0.1:2181
      session-timeout: 6000
      connect-timeout: 2000
      username: ""
      password: ""
    consul:
      cluster: default
      server-addr: 127.0.0.1:8500
      acl-token:
    etcd3:
      cluster: default
      server-addr: http://localhost:2379
    sofa:
      server-addr: 127.0.0.1:9603
      application: default
      region: DEFAULT_ZONE
      datacenter: DefaultDataCenter
      cluster: default
      group: SEATA_GROUP
      address-wait-time: 3000

  server:
    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
    max-commit-retry-timeout: -1
    max-rollback-retry-timeout: -1
    rollback-retry-timeout-unlock-enable: false
    enable-check-auth: true
    enable-parallel-request-handle: true
    retry-dead-threshold: 130000
    xaer-nota-retry-timeout: 60000
    recovery:
      handle-all-session-period: 1000
    undo:
      log-save-days: 7
      log-delete-period: 86400000
    session:
      branch-async-queue-size: 5000 #branch async remove queue size
      enable-branch-async-remove: false #enable to asynchronous remove branchSession
  store:
    # support: file 、 db 、 redis
    mode: file
    session:
      mode: file
    lock:
      mode: file
    file:
      dir: sessionStore
      max-branch-session-size: 16384
      max-global-session-size: 512
      file-write-buffer-cache-size: 16384
      session-reload-read-size: 100
      flush-disk-mode: async
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true
      user: mysql
      password: mysql
      min-conn: 5
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 100
      max-wait: 5000
    redis:
      mode: single
      database: 0
      min-conn: 1
      max-conn: 10
      password:
      max-total: 100
      query-limit: 100
      single:
        host: 127.0.0.1
        port: 6379
      sentinel:
        master-name:
        sentinel-hosts:
  metrics:
    enabled: false
    registry-type: compact
    exporter-list: prometheus
    exporter-prometheus-port: 9898
  transport:
    rpc-tc-request-timeout: 30000
    enable-tc-server-batch-send-response: false
    shutdown:
      wait: 3
    thread-factory:
      boss-thread-prefix: NettyBoss
      worker-thread-prefix: NettyServerNIOWorker
      boss-thread-size: 1

application.yml文件的内容如下:(我使用的配置,给大家打个样,保守一点可以直接在这个基础上更改)

server:
  port: 7091 //建议就使用这个也可以自定义

spring:
  application:
    name: seata-server //建议就使用这个也可以自定义
    
logging:
  config: classpath:logback-spring.xml
  file:
    path: ${user.home}/logs/seata

console:
  user:
    username: seata //seata用户,建议就使用这个,也可以自定义
    password: seata //seata密码,建议就使用这个,也可以自定义

seata:
  config:
    type: nacos //我们的配置中心在nacos上,所以类型为nacos
    nacos:
        server-addr: 172.18.1.48:8848  	//刚才配置nacos自定义的ip地址加上端口号
        group: "SEATA_GROUP"  		  	//nacos上的自己命名的group
        namespace: "4ef5c1ec-a7cb-4975-ad8b-5efe33db2413" //nacos上的自己命名的namespace
        file-extension: yaml        	//nacos上的自己配置文件的类型
        data-id: seataServer.yaml	    //nacos上的自己配置文件的名字
        username: "nacos"			    //nacos上的用户名
        password: "nacos"			    //nacos上的密码
  registry:
    type: nacos
    nacos:
        application: seata-server     	//注册进nacos的名字,建议和上面的一样
        server-addr: 172.18.1.48:8848 	//刚才配置nacos自定义的ip地址加上端口号
        group: "SEATA_GROUP"		 	//nacos上的自己命名的group
        namespace: "4ef5c1ec-a7cb-4975-ad8b-5efe33db2413" //nacos上的自己命名的namespace
        cluster: default 				//当前seata所在的集群名(我猜)
        username: "nacos"			    //nacos上的用户名
        password: "nacos"			    //nacos上的密码
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

4、此时数据库seata的相关表和windows上的相关文件已经准备好了,现在我们来到nacos,实现配置中心里文件的实现。
首先
在这里插入图片描述
其次
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第8张图片
然后
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第9张图片
在箭头里放入以下内容(需要更改的地放入了注解,其他的我也不懂,详情见官方文档)

service:
  vgroupMapping:
    order_tx_group: default     //其中order_tx_group可以自定义,记得统一
    default_tx_group: default   //其中default_tx_group可以自定义,记得统一
  default:
    grouplist: 127.0.0.1:8091
    enableDegrade: false
    disableGlobalTransaction: false
    
store:
  mode: db
  db:
    datasource: druid
    dbType: mysql
    driverClassName: com.mysql.cj.jdbc.Driver
    globalTable: global_table
    lockTable: lock_table
    branchTable: branch_table
    distributedLockTable: distributed_lock
    maxConn: 30
    maxWait: 5000
    minConn: 5
    queryLimit: 100
    //下方是数据库的经典配置,数据库指向刚才为seata创建的数据库即可
    url: jdbc:mysql://172.18.1.30:3306/db_seata?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&useSSL=false
    user: root
    password: abc123

client:
  rm:
    asyncCommitBufferLimit: 10000
    lock:
      retryInterval: 10
      retryPolicyBranchRollbackOnConflict: true
      retryTimes: 30
    reportRetryCount: 5
    reportSuccessEnable: false
    sagaBranchRegisterEnable: false
    sagaJsonParser: fastjson
    sqlParserType: druid
    tableMetaCheckEnable: true
    tableMetaCheckerInterval: 60000
    tccActionInterceptorOrder: -2147482648
  tm:
    commitRetryCount: 5
    defaultGlobalTransactionTimeout: 60000
    degradeCheck: false
    degradeCheckAllowTimes: 10
    degradeCheckPeriod: 2000
    interceptorOrder: -2147482648
    rollbackRetryCount: 5
  undo:
    compress:
      enable: true
      threshold: 64k
      type: zip
    dataValidation: true
    logSerialization: jackson
    logTable: undo_log
    onlyCareUpdateColumns: true

log:
  exceptionRate: 100

metrics:
  enabled: false
  exporterList: prometheus
  exporterPrometheusPort: 9898
  registryType: compact

server:
  distributedLockExpireTime: 10000
  enableParallelRequestHandle: false
  maxCommitRetryTimeout: -1
  maxRollbackRetryTimeout: -1
  recovery:
    asynCommittingRetryPeriod: 1000
    committingRetryPeriod: 1000
    rollbackingRetryPeriod: 1000
    timeoutRetryPeriod: 1000
  rollbackRetryTimeoutUnlockEnable: false
  session:
    branchAsyncQueueSize: 5000
    enableBranchAsyncRemove: false
  undo:
    logDeletePeriod: 86400000
    logSaveDays: 7
  xaerNotaRetryTimeout: 60000

tcc:
  fence:
    cleanPeriod: 1h
    logTableName: tcc_fence_log

transport:
  compressor: none
  enableRmClientBatchSendRequest: true
  enableTcServerBatchSendResponse: false
  enableTmClientBatchSendRequest: false
  heartbeat: true
  rpcRmRequestTimeout: 30000
  rpcTcRequestTimeout: 30000
  rpcTmRequestTimeout: 30000
  serialization: seata
  server: NIO
  shutdown:
    wait: 3
  threadFactory:
    bossThreadPrefix: NettyBoss
    bossThreadSize: 1
    clientSelectorThreadPrefix: NettyClientSelector
    clientSelectorThreadSize: 1
    clientWorkerThreadPrefix: NettyClientWorkerThread
    serverExecutorThreadPrefix: NettyServerBizHandler
    shareBossWorker: false
    workerThreadPrefix: NettyServerNIOWorker
    workerThreadSize: default
  type: TCP

三、启动seata 镜像

请先确认,windows下的文件是否准备配置完毕,seata的数据库配置是否完毕,seata数据是否准备完毕,如果全部ok,那么准备去起飞。

然后打开powershell运行使用以下指令(在使用以下指令时,最好不要直接复制使用,powershell可能会报错,先打开记事本将格式调整一下,需要先把注释删掉,缩进换行全部取消,再放进powershell运行)

docker run -d   -p 8091:8091 -p 7091:7091 
--net mynet --ip 172.18.1.91 /*--mynet是使用了docker的自定义网桥
							  	--这样可以让你的mysql地址固定
							    --目的是为了能让nacos,seata,mysql能够互相访问*/
-v d:\docker\seata\resources\application.yaml/*你刚才创建文件的位置*/:/seata-server/resources/application.yaml 
--name seata-server/*你给这个seata取的名字*/ seata:1.5.2/*nacos镜像的名字加版本号*/

至此,seata启动成功
在这里插入图片描述

客户端的部署

客户端的准备

首先
(假设)我们有的客户端有三个事务:(即在idea创建了三个client项目)
1、seata-order-service
2、seata-account-service
3、seata-storage-service

一、客户端的依赖准备(pom.xml

然后对每个client下pom.xml,建议使用以下版本(因为我是使用这些版本跑通的):
spring-boot-dependencies------>2.3.12.RELEASE
spring-cloud-dependencies------>Hoxton.SR12
spring-cloud-alibaba-dependencies------>2.2.8.RELEASE

  
 
    
        
        
            org.springframework.boot
            spring-boot-dependencies
            2.3.12.RELEASE
            pom
            import
        
        
            org.springframework.cloud
            spring-cloud-dependencies
            Hoxton.SR12
            pom
            import
        
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            2.2.8.RELEASE
            pom
            import
        
    



    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-config
    
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-seata
        
            
                seata-spring-boot-starter
                io.seata
            
        
    
    
        io.seata
        seata-spring-boot-starter
        1.5.2
    
    
    
        org.springframework.cloud
        spring-cloud-starter-openfeign
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        2.0.0
    
    
        mysql
        mysql-connector-java
        8.0.20
    

二、 客户端的配置文件(application.yaml

然后给每个client下面配置一下内容:
1、seata-order-service ->application.yaml
2、seata-account-service ->application.yaml
3、seata-account-service ->application.yaml
SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第10张图片

下面以seata-order-serviceapplication.yaml为例子:

server:
  port: 1001      /*每个client的端口:(自定义就好)
  					seata-order-service:1001
  					seata-account-service:1002	
  					seata-account-service"1003*/
				
spring:
  application:
    name: seata-order-service
				    /*每个client的名字:(自定义就好)
  					seata-order-service:seata-order-service
  					seata-account-service:seata-account-service	
  					seata-account-service"seata-account-service*/
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848    /*指向nacos,这里为什么是127.0.0.1,
       									是因为我们的客户是在windows下的,
								        docker里的nacos之前有配置本地端口映射*/
        namespace: 4ef5c1ec-a7cb-4975-ad8b-5efe33db2413  //之前配置的namespace,一致就好
        group: SEATA_GROUP								 //之前配置的group,一致就好
      config:
        server-addr: 127.0.0.1:8848		/*指向nacos,这里为什么是127.0.0.1,
       									是因为我们的客户是在windows下的,
								        docker里的nacos之前有配置本地端口映射*/
        namespace: 4ef5c1ec-a7cb-4975-ad8b-5efe33db2413  //之前配置的namespace,一致就好
        group: SEATA_GROUP								 //之前配置的group,一致就好
        file-extension: yaml							 //配置文件格式
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    //数据库的经典配置,记得每个客户端的这里↓↓↓↓↓↓↓↓↓↓↓↓数据库名不一样
    url: jdbc:mysql://localhost:3306/db_seata_order?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: abc123
	

//这里要和seataServer.yaml配置的一样,及seata的配置中心的文件
seata:
  enable: true
  application-id: seata-order-service
  tx-service-group: order_tx_group
  service:
    vgroupMapping:
      order_tx_group: default
    grouplist:
      default: 127.0.0.1:8091
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
feign:
  hystrix:
    enabled: false

logging:
  level:
    io:
      seata: info

mybatis:
  mapperLocations: classpath:mapper/*.xml

Nacos上的对Client的配置文件

一、Nacos上 创建每个client的配置文件

首先在Nacos上,用刚才创建seata配置中心文件的方法,为三个client创建三个独立的配置文件,文件命名严格按照你spring.application.name.你定义的客户端名字------->你定义的客户端名字.yaml命名:(不然可能会出现客户端找不到nacos的配置中心的报错,我使用dataid进行自定义也不行,不知道是不是nacos2.1.0的小问题,也可能是我没搞懂)
在这里插入图片描述

二、Nacos编写配置内容(每个都需要写)

然后配置文件为以下内容(需要更改的地方加了注解,其它的我也不懂,详情请见官方文档)

service:
  vgroupMapping:
    order_tx_group: default     //其中order_tx_group可以自定义,记得统一
    default_tx_group: default   //其中default_tx_group可以自定义,记得统一
  default:
    grouplist: 127.0.0.1:8091
    enableDegrade: false
    disableGlobalTransaction: false
    
store:
  mode: db
  db:
    datasource: druid
    dbType: mysql
    driverClassName: com.mysql.cj.jdbc.Driver
    globalTable: global_table
    lockTable: lock_table
    branchTable: branch_table
    distributedLockTable: distributed_lock
    maxConn: 30
    maxWait: 5000
    minConn: 5
    queryLimit: 100
    //下方是数据库的经典配置,数据库指向刚才为seata创建的数据库即可
    url: jdbc:mysql://172.18.1.30:3306/db_seata?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&useSSL=false
    user: root
    password: abc123

client:
  rm:
    asyncCommitBufferLimit: 10000
    lock:
      retryInterval: 10
      retryPolicyBranchRollbackOnConflict: true
      retryTimes: 30
    reportRetryCount: 5
    reportSuccessEnable: false
    sagaBranchRegisterEnable: false
    sagaJsonParser: fastjson
    sqlParserType: druid
    tableMetaCheckEnable: true
    tableMetaCheckerInterval: 60000
    tccActionInterceptorOrder: -2147482648
  tm:
    commitRetryCount: 5
    defaultGlobalTransactionTimeout: 60000
    degradeCheck: false
    degradeCheckAllowTimes: 10
    degradeCheckPeriod: 2000
    interceptorOrder: -2147482648
    rollbackRetryCount: 5
  undo:
    compress:
      enable: true
      threshold: 64k
      type: zip
    dataValidation: true
    logSerialization: jackson
    logTable: undo_log
    onlyCareUpdateColumns: true

log:
  exceptionRate: 100

metrics:
  enabled: false
  exporterList: prometheus
  exporterPrometheusPort: 9898
  registryType: compact

tcc:
  fence:
    cleanPeriod: 1h
    logTableName: tcc_fence_log

transport:
  compressor: none
  enableRmClientBatchSendRequest: true
  enableTcServerBatchSendResponse: false
  enableTmClientBatchSendRequest: false
  heartbeat: true
  rpcRmRequestTimeout: 30000
  rpcTcRequestTimeout: 30000
  rpcTmRequestTimeout: 30000
  serialization: seata
  server: NIO
  shutdown:
    wait: 3
  threadFactory:
    bossThreadPrefix: NettyBoss
    bossThreadSize: 1
    clientSelectorThreadPrefix: NettyClientSelector
    clientSelectorThreadSize: 1
    clientWorkerThreadPrefix: NettyClientWorkerThread
    serverExecutorThreadPrefix: NettyServerBizHandler
    shareBossWorker: false
    workerThreadPrefix: NettyServerNIOWorker
    workerThreadSize: default
  type: TCP

客户端的启动

一、Client的启动类

每个启动类记得加上以下注解:

	@EnableDiscoveryClient
	@EnableFeignClients  //如果要使用Feign进行负载均衡才加,另外也需要引入依赖
	@SpringBootApplication

二、Seata在服务层的注解

最后在你需要使用seata回滚的方法上加入注解

	@GlobalTransactional(name = "seata-create-order/*自定义名字,重名会冲突*/",rollbackFor = Exception.class)

三、启动成功

SpringCloud Alibaba 2022新版 docker中 整合 seata 1.5.X(分布式事务管理) nacos2.1.X(配置中心、注册中心) Mysql8.0.X(储存中心)_第11张图片

总结

以上便是,我给大家分享的在windows中使用docker下的seata1.5.2,nacos2.1.0,mysql8.0.18的部署和客户端配置的方法。文章中有什么问题或者遇到了什么问题,可以提出大家一起探讨一起解决。我也是站在巨人的肩膀上才完成部署,所以希望大家在使用后能有一定的帮助。

你可能感兴趣的:(服务搭建,docker,docker,服务器,mysql,intellij-idea,分布式)