目录
Nacos作为配置中心实现配置管理
统一配置管理
如何在nocas添加配置文件
在微服务拉取nacos配置中心的配置
1)引入nacos-config依赖
2)添加bootstrap.yaml
3)测试,读取nacos配置中心中配置文件的内容
编辑 总结:实现nacos配置管理的步骤
配置热更新
方式一
方式二
配置共享
多种配置文件的优先级(优先加载哪个文件属性的内容)
服务多环境共享同一个配置文件
使用dev环境启动user-service服务
使用test环境启动user-service服务
nacos搭建集群
单例nacos存在的问题
nacos客户端如何知道要nacos集群的哪一个地址呢?
搭建集群步骤:
1.初始化数据库
2.创建一个nacos_cluster文件夹
3.然后进入application.properties文件中配置当前nacos实例的ip端口和数据源连接信息
4.复制两份出来,然后在各自的application.properties文件中修改端口号为8846,8847
编辑 5.分别在三个文件夹中的bin目录下输入
6.配置集群成功
使用nginx反向代理nacos集群
在微服务中修改连接nacos的端口号,修改为nginx的80端口号,连接nacos默认会加上/nacos
nacos扩展
编辑配置同一个命名空间所有群组中不同微服务实例可以一起访问的配置文件
配置扩展配置文件
Nacos作为配置中心实现配置管理
Nacos除了可以做注册中心,同样可以做配置管理来使用。
什么是配置中心,就是统一管理所有微服务实例的配置文件的文件
统一配置管理
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
如何在nocas添加配置文件
Date ID写的是服务名字-[profile].yaml
这里的配置内容写了时间的格式
注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
在微服务拉取nacos配置中心的配置
微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
但如果尚未读取application.yml,又如何得知nacos地址呢?
因此spring引入了一种新的配置文件:bootstrap.yaml文件(通过里面的配置内容得知nacos地址,并拉取配置文件的信息),会在application.yml之前被读取,流程如下:
1)引入nacos-config依赖
首先,在user-service服务中,引入nacos-config的客户端依赖:
一个是把nacos作为注册中心的客户端依赖,一个是把nacos作为配置中心的依赖
<!-- 导入nacos的客户端依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
2)添加bootstrap.yaml
然后,在user-service中添加一个bootstrap.yaml文件,内容如下:
通过这个bootstrap.yml文件配置的内容可以知道要拉取nacos配置中心的哪一个配置文件(微服务名字,开发环境,文件后缀名)
根据spring.cloud.nacos.server-addr获取nacos地址,再根据
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
作为文件id,来读取配置。
spring:application:name: user-service #微服务的名字profiles:active: dev #指定开发环境cloud:nacos:server-addr: localhost:8848 #指定要连接的nacos的地址config:file-extension: yaml #文件的后缀名
注意:原来的application.yml文件中的相同的配置可以注释掉
server:port: 8081
spring:datasource:url: jdbc:mysql://192.168.230.100:3306/cloud_user??useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=falseusername: rootpassword: 1234driver-class-name: com.mysql.jdbc.Driver
# application:
# name: user-service
# cloud:
# nacos:
# server-addr: localhost:8848
# discovery:
# cluster-name: TJ #让这个user-service实例加入TJ集群
# namespace: 7bd1f533-2ffc-4b86-96cf-c07383361a6d #命名空间id
#mybatis:
# type-aliases-package: cn.itcast.user.pojo
# configuration:
# map-underscore-to-camel-case: true
3)测试,读取nacos配置中心中配置文件的内容
在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:
@Value("${pattern.format}")private String dateformat;@GetMapping("/now")public String nowTime(){//获取当前时间并格式化成特定字符串形式返回return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}
启动之后访问成功
如果拉取nacos配置中心的配置文件失败时,就会报错,无法识别yml文件pattern.format的属性
总结:实现nacos配置管理的步骤
1.在nacos中添加配置文件
2.在微服务中引入nacos的config依赖
3.在微服务中添加bootstrap.yml文件,配置nacos地址,当前环境,服务名称,文件后缀名,这些就可以决定这个程序去nacos配置中心读取哪一个配置文件的内容
配置热更新
我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。
要实现配置热更新,可以使用两种方式:
方式一
在@Value注入的变量所在类上添加注解@RefreshScope:
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {@Value("${pattern.format}")private String dateformat;@GetMapping("/now")public String nowTime(){//获取当前时间并格式化成特定字符串形式返回return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}
}
修改nacos配置中心配置文件后重新发布
方式二
使用@ConfigurationProperties注解进行实体类与配置文件相互映射
代替@Value注解。
在user-service服务中,添加一个类,读取patterrn.dateformat属性:
/*** 与nacos配置中心的配置文件的pattern属性相互映射*/
@Data
@ConfigurationProperties(prefix = "pattern")
@Component//把这个类交给spring管理,维护为bean
public class DateTimeFormatVO {private String format;
}
@Autowiredprivate DateTimeFormatVO dateformat;@GetMapping("/now")public String nowTime(){//获取当前时间并格式化成特定字符串形式返回return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat.getFormat()));}
配置共享
其实微服务启动时,会去nacos读取多个配置文件,例如:
-
[spring.application.name]-[spring.profiles.active].yaml
,例如:userservice-dev.yaml -
[spring.application.name].yaml
,例如:userservice.yaml
而[spring.application.name].yaml
不包含环境
因此无论profile如何变化,服务名字.yaml文件的内容一定会被加载,因此可以被多个环境共享。
多种配置文件的优先级(优先加载哪个文件属性的内容)
如果这些配置文件中有相同的key(如 pattern.format=XXX),则按照优先级决定使用哪个文件的key的内容
服务名字-profile.yaml>服务名字.yaml>本地配置的yml文件
服务多环境共享同一个配置文件
/*** 与nacos配置中心的配置文件的pattern属性相互映射*/
@Data
@ConfigurationProperties(prefix = "pattern")
@Component//把这个类交给spring管理,维护为bean
public class DateTimeFormatVO {private String format;private String commonProperties;
}
@Autowiredprivate DateTimeFormatVO dateformat;@GetMapping("/now")public String nowTime(){System.out.println(dateformat.getCommonProperties());//获取当前时间并格式化成特定字符串形式返回return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat.getFormat()));}
使用dev环境启动user-service服务
可以访问user-service-dev.yaml配置文件的值
spring:application:name: user-service #微服务的名字profiles:active: test #指定开发环境cloud:nacos:server-addr: localhost:8848 #指定要连接的nacos的地址config:file-extension: yaml #文件的后缀名
使用dev环境启动user-service服务,可以获取pattern属性中的format,commonProperties值
时间的格式是user-service-dev.yaml配置文件中的pattern.format的值,可以发现优先级高
使用test环境启动user-service服务
spring:application:name: user-service #微服务的名字profiles:active: test #指定开发环境cloud:nacos:server-addr: localhost:8848 #指定要连接的nacos的地址config:file-extension: yaml #文件的后缀名
可以同时获取pattern属性中的commonProperties值,和获取format属性值
然后format属性值为user-service.ymal公共配置文件的值,因为test环境不能访问user-service-dev.yaml配置文件的值
nacos搭建集群
单例nacos存在的问题
单例nacos存在的问题:一旦这个nacos服务端down掉,那么nacos就会失去作用,所以我们可以搭建nacos集群
还存在的问题:重启nacos服务后,配置中心中的配置文件都会消失,所以我们可以创建一个数据库,来存储nacos的配置中心和注册中心的信息,一但重启nacos就去数据库中读取之前存入的信息
nacos客户端如何知道要nacos集群的哪一个地址呢?
所以我们可以使用nginx实现反向代理 ,具体的图解如下:
搭建集群步骤:
- 搭建数据库,初始化数据库表结构
- 下载nacos安装包
- 配置nacos
- 启动nacos集群
- nginx反向代理
1.初始化数据库
Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
首先新建一个数据库,命名为nacos,而后导入uwu下面的SQL:
/*Navicat Premium Data TransferSource Server : localSource Server Type : MySQLSource Server Version : 50622Source Host : localhost:3306Source Schema : nacosTarget Server Type : MySQLTarget Server Version : 50622File Encoding : 65001Date: 09/07/2021 09:40:13
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS `config_info`;
CREATE TABLE `config_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',`group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',`md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL 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 CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',`src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',`app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',`c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info' ROW_FORMAT = Compact;-- ----------------------------
-- Records of config_info
-- ------------------------------ ----------------------------
-- Table structure for config_info_aggr
-- ----------------------------
DROP TABLE IF EXISTS `config_info_aggr`;
CREATE TABLE `config_info_aggr` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',`group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',`datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id',`content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '内容',`gmt_modified` datetime NOT NULL COMMENT '修改时间',`app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id`, `group_id`, `tenant_id`, `datum_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '增加租户字段' ROW_FORMAT = Compact;-- ----------------------------
-- Records of config_info_aggr
-- ------------------------------ ----------------------------
-- Table structure for config_info_beta
-- ----------------------------
DROP TABLE IF EXISTS `config_info_beta`;
CREATE TABLE `config_info_beta` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',`group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',`app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',`content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',`beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'betaIps',`md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL 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 CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',`src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_beta' ROW_FORMAT = Compact;-- ----------------------------
-- Records of config_info_beta
-- ------------------------------ ----------------------------
-- Table structure for config_info_tag
-- ----------------------------
DROP TABLE IF EXISTS `config_info_tag`;
CREATE TABLE `config_info_tag` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',`group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',`tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id',`app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',`content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',`md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL 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 CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',`src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id`, `group_id`, `tenant_id`, `tag_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tag' ROW_FORMAT = Compact;-- ----------------------------
-- Records of config_info_tag
-- ------------------------------ ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
DROP TABLE IF EXISTS `config_tags_relation`;
CREATE TABLE `config_tags_relation` (`id` bigint(20) NOT NULL COMMENT 'id',`tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name',`tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tag_type',`data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',`group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',`nid` bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`nid`) USING BTREE,UNIQUE INDEX `uk_configtagrelation_configidtag`(`id`, `tag_name`, `tag_type`) USING BTREE,INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation' ROW_FORMAT = Compact;-- ----------------------------
-- Records of config_tags_relation
-- ------------------------------ ----------------------------
-- Table structure for group_capacity
-- ----------------------------
DROP TABLE IF EXISTS `group_capacity`;
CREATE TABLE `group_capacity` (`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',`group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin 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`) USING BTREE,UNIQUE INDEX `uk_group_id`(`group_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '集群、各Group容量信息表' ROW_FORMAT = Compact;-- ----------------------------
-- Records of group_capacity
-- ------------------------------ ----------------------------
-- Table structure for his_config_info
-- ----------------------------
DROP TABLE IF EXISTS `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) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',`content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL,`src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',PRIMARY KEY (`nid`) USING BTREE,INDEX `idx_gmt_create`(`gmt_create`) USING BTREE,INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE,INDEX `idx_did`(`data_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '多租户改造' ROW_FORMAT = Compact;-- ----------------------------
-- Records of his_config_info
-- ------------------------------ ----------------------------
-- Table structure for permissions
-- ----------------------------
DROP TABLE IF EXISTS `permissions`;
CREATE TABLE `permissions` (`role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`resource` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`action` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,UNIQUE INDEX `uk_role_permission`(`role`, `resource`, `action`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of permissions
-- ------------------------------ ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles` (`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,UNIQUE INDEX `idx_user_role`(`username`, `role`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of roles
-- ----------------------------
INSERT INTO `roles` VALUES ('nacos', 'ROLE_ADMIN');-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
DROP TABLE IF EXISTS `tenant_capacity`;
CREATE TABLE `tenant_capacity` (`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin 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`) USING BTREE,UNIQUE INDEX `uk_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '租户容量信息表' ROW_FORMAT = Compact;-- ----------------------------
-- Records of tenant_capacity
-- ------------------------------ ----------------------------
-- Table structure for tenant_info
-- ----------------------------
DROP TABLE IF EXISTS `tenant_info`;
CREATE TABLE `tenant_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp',`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',`tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_name',`tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tenant_desc',`create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'create_source',`gmt_create` bigint(20) NOT NULL COMMENT '创建时间',`gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp`, `tenant_id`) USING BTREE,INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = Compact;-- ----------------------------
-- Records of tenant_info
-- ------------------------------ ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`password` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`enabled` tinyint(1) NOT NULL,PRIMARY KEY (`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 1);SET FOREIGN_KEY_CHECKS = 1;
2.创建一个nacos_cluster文件夹
下载一个nacos压缩包https://github.com/alibaba/nacos/tags,可以选择任意版本下载。
解压到nacos_cluster文件夹中
进入nacos里面的conf文件夹,进入cluster.conf中,配置nacos集群中,各个nacos的地址端口
#
# 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.
##it is ip
#example
127.0.0.1:8845
127.0.0.1:8846
127.0.0.1:8847
3.然后进入application.properties文件中配置当前nacos实例的ip端口和数据源连接信息
nacos.inetutils.ip-address=127.0.0.1
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.230.100:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1234
4.复制两份出来,然后在各自的application.properties文件中修改端口号为8846,8847
5.分别在三个文件夹中的bin目录下输入
startup.cmd命令启动
6.配置集群成功
在8845端口的nacos服务下添加配置文件
在8846,8847端口的服务下都会显示这个配置文件,因为这三个端口的nacos都是连接的同一个数据库
使用nginx反向代理nacos集群
在nacos客户端如何连接这三个nacos服务器,所以我们需要使用nginx进行反向代理
修改conf/nginx.conf文件,配置如下:
这个配置文件通常用于将 Nginx 设置为 Nacos 的反向代理,Nacos 是一个服务发现和管理平台。通过这个配置,所有发送到 Nginx 的
/nacos
路径的 HTTP 请求都会被转发到 Nacos 集群nacos-cluster中。
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream nacos-cluster {server 127.0.0.1:8845;server 127.0.0.1:8846;server 127.0.0.1:8847;}server {listen 80; server_name localhost;location /nacos {proxy_pass http://nacos-cluster;}}
}
测试改完后是否正确
window下nginx相关指令:
查看nginx的版本号:nginx.exe -v
启动nginx:start nginx.exe
快速停止或关闭nginx:nginx.exe -s stop
正常停止或关闭nginx:nginx.exe -s quit
配置文件nginx.conf修改重装载命令:nginx.exe -s reload
输入localhost/nacos(默认是80端口),轮询访问nacos集群中的各个实例
在微服务中修改连接nacos的端口号,修改为nginx的80端口号,连接nacos默认会加上/nacos
这样一来微服务就会根据nginx给的nacos服务地址进行注册,和去nacos配置中心中拉取配置文件
spring:application:name: user-service #微服务的名字profiles:active: dev #指定开发环境cloud:nacos:server-addr: localhost:80 #指定要连接的nacos的地址config:file-extension: yaml #文件的后缀名
nacos扩展
nacos中有不同的命名空间,不同的命名空间之间的微服务实例不能跨命名空间访问
命名空间内又有群组,不同群组之间的微服务实例也不能跨组访问
组内又有集群,不同集群之间微服务实例可以互相访问
spring:application:name: order-service #微服务的名字profiles:active: dev #指定开发环境cloud:nacos:server-addr: localhost:80 #指定要连接的nacos的地址config:file-extension: yaml #文件的后缀名discovery:group: GROUP_ORDERSERVICE
不同组之间的服务不能互相访问
配置同一个命名空间所有群组中不同微服务实例可以一起访问的配置文件
与微服务实例可以加载处于不同群组的配置文件
spring:application:name: order-service #微服务的名字profiles:active: dev #指定开发环境cloud:nacos:server-addr: localhost:80 #指定要连接的nacos的地址discovery:group: GROUP_USERSERVICE #给这个微服务指定群组名字config:file-extension: yaml #文件的后缀名shared-configs:- data-id: shard-common.yaml #公共配置文件group: GROUP_COMMON #公共配置文件所处的群组refresh: true #开启热更新
配置扩展配置文件
如果这个扩展配置文件的key值与公共配置文件的key一样,可以覆盖公共配置文件的key值
spring:application:name: user-service #微服务的名字profiles:active: dev #指定开发环境cloud:nacos:server-addr: localhost:80 #指定要连接的nacos的地址discovery:group: GROUP_USERSERVICE #给这个微服务指定群组名字config:file-extension: yaml #文件的后缀名shared-configs:- data-id: shard-common.yaml #公共配置文件group: GROUP_COMMON #公共配置文件所处的群组refresh: true #开启热更新extension-configs:- data-id: extension-common.yaml #扩展文件的名字group: GROUP_EXT #扩展文件的名字所处的群组refresh: true