微服务03_nacos注册中心
- 一、nocos注册中心
- 1、win安装:
- 2、服务注册到Nacos
- 3、Nacos服务分级存储模型
- 配置集群实例属性
- 4、集群负载均衡
- 1.order中添加配置,加入集群
- 2.将 默认 轮巡 改为 优先选择集群(集群中默认是随机)
- 5、根据权重负载均衡(测试)
- 6、环境隔离 - namespace
- 二、Eureka/nocos对比
- 1.Eureka和nacos的服务注册和拉取:
- 2. Nacos与eureka的共同点
- 3. Nacos与Eureka的区别
- 三、Nacos配置管理
- 1、统一配置管理的服务
- 1.创建配置
- 2.启动时,读取yaml的顺序:
- 3.引入 nacos-config 依赖
- 4.添加 bootstrap.yml 【其中必须是yaml】
- 5. 测试:使用代码来验证是否拉取成功
- 2、配置热更新
- 方式一:在 @Value 注入的变量所在类上添加注解 @RefreshScope
- 方式二:使用 @ConfigurationProperties 注解读取配置文件,就不需要加 @RefreshScope 注解。
- 3、配置共享
- 1.添加一个环境共享配置:
- 2.测试: 运行两个 UserApplication,使用不同的profile
- 3.配置的优先级:
- 4、搭建Nacos集群
- 1. 搭建mysql集群并初始化数据库表
- 2. 下载解压nocos
- 3. 修改集群配置节点信息、数据库配置
- 4. 分别启动多个nacos节点
- 5. nginx反向代理
- idea代码中application.yml文件配置如下:
- 而后在浏览器访问:http://localhost/nacos即可。
一、nocos注册中心
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
1、win安装:
在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
- 解压文件nacos-server-1.4.1.zip
目录分析:
target:是一个jar包,而nocos是基于JAVA语言实现。
conf:配置文件。例如端口默认8848
bin:可执行文件。可以直接startup. - cmd下启动:startup.cmd -m standalone 【模式:单机启动】
2、服务注册到Nacos
- 第一步:在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- 注释掉order-service和user-service中原有的eureka依赖。
- 添加nacos的客户端依赖:
<!-- nacos客户端依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos 服务端地址
3、Nacos服务分级存储模型
Nacos服务分级存储模型 ① 一级是服务,例如userservice ② 二级是集群,例如杭州或上海 ③ 三级是实例,例如杭州机房的某台部署了userservice的服务器服务比如说:orderService订单服务
集群比如说:上海集群、北京集群,当上海的用户就去调用上海集群的订单服务即可。nacos.discovery.cluster-name: beijing
实例:一个个服务。userService01/userService02/userService03
配置集群实例属性
如何设置实例的集群属性
① 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可
修改application.yml,添加如下内容:
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos 服务端地址
discovery:
cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
4、集群负载均衡
需要给Order配置集群属性,目的是为了:当order远程调用user服务时,能选择本地集群。【能选择同一个名字的集群】(实例配置好了集群,是为了能选择实例集群)。
1.order中添加配置,加入集群
cloud:
nacos:
server-addr: localhost:8848 #nacos 服务端地址
discovery:
cluster-name: HZ
2.将 默认 轮巡 改为 优先选择集群(集群中默认是随机)
优先选择集群,在集群中多个服务,在进行随机访问-负载均衡。
当本地服务集群都消失后,还可以去访问其他集群。并且在调用者的日志中出现警告
userservice:
ribbon:
#NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
- 模拟当本地集群挂掉后,日志会出现警告{一次夸集群访问}
5、根据权重负载均衡(测试)
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高
实例的权重控制
① Nacos控制台可以设置实例的权重值,0~1之间
② 同集群内的多个实例,权重越高被访问的频率越高
③ 权重设置为0则完全不会被访问.
当版本升级的时候,可以将8081服务器的权重调为0,那么81不在接受用户的请求了,可以做一些版本的升级,那么可以放出0.1来,让少量的客户进来测试,如果没有问题,可以继续扩大权重。从而让用户无感知的,进行服务器的升级。
6、环境隔离 - namespace
层次:
第一层:NameSpace 【默认就是public】 环境隔离例如:测试环境、生成环境变化。
第二层:Group 【DEFAULT_GROUP】。分组例如:把业务相关度高的服务,放在一个组里面。例如订单和支付。
第三层:服务Service/Date 【userservice、orderservice】。
第四层:集群模式【上海、杭州、北京集群】
第五层:实例【userservice01/02/03】
- 创建命名空间
- 修改服务的命名空间:
二、Eureka/nocos对比
1.Eureka和nacos的服务注册和拉取:
- 服务提供者在启动时,会把自己的服务信息提交给注册中心。
- 注册中心会把信息保留下来
- 消费者需要消费时,就可以找注册中心进行服务拉取。服务发现。
这个服务拉取的动作,并不是每一次调用接口要做服务拉取。而是将从注册中心中的拉取的消息,进行缓存【服务列表缓存】。每30秒会去注册中心进行拉取更新数据。
3.1 当服务拉取后,在根据负载均衡挑选一个进行远程调用。
2. Nacos与eureka的共同点
① 都支持服务注册和服务拉取
② 都支持服务提供者心跳方式做健康检测
3. Nacos与Eureka的区别
① Nacos支持服务端主动检测提供者状态:
临时实例采用:服务提供者向注册中心进行心跳模式
非临时实例采用:注册中心向服务提供者主动检测模式。
② 临时实例心跳不正常会被剔除,非临时实例则不会被剔除,等待正常。
③ Nacos支持服务列表变更后,nacos进行消息推送模式,服务消费者的服务列表更新更及时。
④ Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方法
- 如何设置临时和非临时的实例:一个配置:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 是否是临时实例
三、Nacos配置管理
配置更改热更新
1、统一配置管理的服务
该服务会记录核心的配置,当其他微服务启动的时候,会读取配置管理的服务,和本地的配置服务相结合使用。
当配置发生了更改,不用逐个服务去更改,而是找到【服务配置中心】,进行修改即可。
当修改了【配置中心】的信息后,该服务会通知各个服务,从而各个服务去完成配置的读取。
1.创建配置
注意:项目的核心配置,需要热更新的配置才有放到 nacos 管理的必要。基本不会变更的一些配置(例如数据库连接)还是保存在微服务本地比较好
2.启动时,读取yaml的顺序:
- 首先我们需要了解 Nacos 读取配置文件的环节是在哪一步,在没加入 Nacos 配置之前,获取配置是这样:
- 加入 Nacos 配置,它的读取是在 application.yml 之前的:
- 这时候如果把 nacos 地址放在 application.yml 中,显然是不合适的,Nacos 就无法根据地址去获取配置了。
因此,nacos 地址必须放在优先级最高的 bootstrap.yml 文件。
3.引入 nacos-config 依赖
首先,在 user-service 服务中,引入 nacos-config 的客户端依赖:
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
4.添加 bootstrap.yml 【其中必须是yaml】
然后,在 user-service 中添加一个 bootstrap.yml 文件,内容如下:
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
根据 spring.cloud.nacos.server-addr 获取 nacos地址,再根据{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。
在这个例子例中,就是去读取 userservice-dev.yaml
5. 测试:使用代码来验证是否拉取成功
在 user-service 中的 UserController 中添加业务逻辑,读取nacos中配置中心的:pattern.dateformat 配置并使用:
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
//格式化时间
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
启动服务后,访问:http://localhost:8081/user/now
2、配置热更新
我们最终的目的,是修改 nacos 中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。
有两种方式:
- 用 @value 读取配置时,搭配 @RefreshScope;
- 直接用 @ConfigurationProperties 读取配置
方式一:在 @Value 注入的变量所在类上添加注解 @RefreshScope
- @RefreshScope
方式二:使用 @ConfigurationProperties 注解读取配置文件,就不需要加 @RefreshScope 注解。
@ConfigurationProperties
在 user-service 服务中,添加一个 PatternProperties 类,读取 patterrn.dateformat 属性
package cn.itcast.user.config;
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
public String dateformat;
}
-----controller------
package cn.itcast.user.web;
@Autowired
private PatternProperties patternProperties;
@GetMapping("now2")
public String now2(){
//格式化时间
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.dateformat));
}
3、配置共享
什么时候需要配置共享呢?
某个配置在开发、测试、上限时的配置都是一样的,那么就需要了配置共享。如果不使用配置共享的话,就需要在每个配置文件都写一份,如果改动就得去每个配置文件去改动。
其实在服务启动时,nacos 会读取多个配置文件,例如:
- [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
- [spring.application.name].yaml,例如:userservice.yaml
- 这里的 [spring.application.name].yaml 不包含环境,因此可以被多个环境共享
1.添加一个环境共享配置:
- 我们在 nacos 中添加一个 userservice.yaml 文件:
在 user-service 中读取共享配置
在 user-service 服务中,修改 PatternProperties 类,读取新添加的属性:
在 user-service 服务中,修改 UserController,添加一个方法:
2.测试: 运行两个 UserApplication,使用不同的profile
修改 UserApplication2 这个启动项,改变其profile值:
- 这样,UserApplication(8081) 使用的 profile 是 dev
- UserApplication2(8082) 使用的 profile 是test
- 启动 UserApplication 和 UserApplication2
访问地址:http://localhost:8081/user/prop,结果:
可以看出来,不管是 dev,还是 test 环境,都读取到了 envSharedValue 这个属性的值。
上面的都是同一个微服务下,那么不同微服务之间可以环境共享吗?
通过下面的两种方式来指定:
extension-configs
shared-configs
spring:
cloud:
nacos:
config:
file-extension: yaml # 文件后缀名
extends-configs: # 多微服务间共享的配置列表
- dataId: common.yaml # 要共享的配置文件id
spring:
cloud:
nacos:
config:
file-extension: yaml # 文件后缀名
shared-configs: # 多微服务间共享的配置列表
- dataId: common.yaml # 要共享的配置文件id
3.配置的优先级:
当前环境的配置优先级 大于共享优先级 大于本地配置
4、搭建Nacos集群
企业中更强调高可用,nacos一定会是集群模式。
- 不管有几台nacos服务器,都需要服务数据共享。所以会有mysql集群,这样多个nacos都来访问mysql,完成数据读写共享。
- 用户请求进入以后,用Nginx负载均衡反向代理,访问不同的nacos节点。
1. 搭建mysql集群并初始化数据库表
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,
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 '租户字段',
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 '租户字段',
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');
2. 下载解压nocos
3. 修改集群配置节点信息、数据库配置
第一:
进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847第二:
然后修改application.properties文件,添加数据库配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
4. 分别启动多个nacos节点
然后分别修改三个文件夹中的application.properties,server.port=8845、46/47
5. nginx反向代理
修改conf/nginx.conf文件,配置如下:
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;
}
}
idea代码中application.yml文件配置如下:
spring:
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
而后在浏览器访问:http://localhost/nacos即可。