1.简介
阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
用来实现配置中心和服务注册中心
![](https://img-blog.csdnimg.cn/img_convert/e61cafa819f6ff8de4160cbf2742da56.png)
2.快速入门
首先在父工程中导入Pom
<!-- alibaba管理依赖-->
<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>
在客户端导入依赖
<!-- nacos客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在客户端yml中加入配置
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务端地址
打开nacos 运行startup.cmd -m standalone
![](https://img-blog.csdnimg.cn/img_convert/9a79e8f544454fc5efe52a0440cc208e.png)
3.Nacos分级存储模型
![](https://img-blog.csdnimg.cn/img_convert/a515841ad75aabf82ee0763ff8bb9de4.png)
![](https://img-blog.csdnimg.cn/img_convert/e8e0b01523e12b446760e0dfaca27809.png)
在服务的yml中加入
cloud:
nacos:
server-addr: localhost:8848 #nacos服务端地址
discovery:
cluster-name: HLJ #集群名
启用两个实例到HLJ集群
![](https://img-blog.csdnimg.cn/img_convert/c465034e88386e0a3adff21d38e553ca.png)
![](https://img-blog.csdnimg.cn/img_convert/7c95b8bb6e26be276ae6913bfe4214cd.png)
![](https://img-blog.csdnimg.cn/img_convert/d151c7cb3753c572e171c85eb5ae3acb.png)
4.负载均衡
1.NacosRule负载均衡策略
①优先选择同集群服务实例列表
②本地集群找不到提供者,才去其它集群寻找,并且会报警告
③确定了可用实例列表后,再采用随机负载均衡挑选实例
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 nacos优先本地随机
加权负载均衡
1.实例的权重控制
①Nacos控制台可以设置实例的权重值,0~1之间
②同集群内的多个实例,权重越高被访问的频率越高
③权重设置为0则完全不会被访问
![](https://img-blog.csdnimg.cn/img_convert/e4e55a001207901f003be90a648db85e.png)
8082端口权限大而且属于本地 所以负载均横策略会优选选择
![](https://img-blog.csdnimg.cn/img_convert/f25a27a1794de5663c0d38f93466d1f8.png)
5.微服务项目搭建nacos(实际应用)
nacos主要用来实现配置中心和服务注册中心
5.1搭建nacos服务发现中心
首先搭建Nacos服务发现中心。在搭建Nacos服务发现中心之前需要搞清楚两个概念:
namespace:用于区分环境、比如:开发环境(dev)、测试环境(test)、生产环境(prod)。
group:用于区分项目,比如:xuecheng-plus项目、xuecheng2.0项目
5.1.1新建命名空间
首先在nacos配置namespace:
登录Centos,启动Naocs,使用sh/data/soft/restart.sh将自动启动Nacos。
nacos界面:http://地址/nacos/index.html
账号密码:nacos/nacos
登录成功,点击左侧菜单“命名空间”进入命名空间管理界面,
![](https://img-blog.csdnimg.cn/img_convert/b29884b05174dfc75899bce04242b0d0.png)
添加后就有了命名空间供我们开发者使用(注:使用命名空间时要使用命名空间ID)
![](https://img-blog.csdnimg.cn/img_convert/8a37247bf8d8b880d6e8d86ffccc3976.png)
5.1.2注册服务到nacos
首先在需要被注册到nacos的模块中添加服务发现依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在该模块的yml文件中添加配置
spring:
application:
name: content-api
cloud:
nacos:
server-addr: nacos地址:8848
discovery: #服务注册配置
namespace: dev #命名空间id
group: xuecheng-plus-project
此时启动项目即可在nacos服务列表中看到我们添加的模块
![](https://img-blog.csdnimg.cn/img_convert/0b86cbf85608bb4d590e9c1338895c41.png)
5.2搭建nacos配置中心
搭建完成Nacos服务发现中心,下边搭建Nacos为配置中心,其目的就是通过Nacos去管理项目的所有配置
项目中的配置文件分为以下几类:
每个项目特有的配置
是指该配置只在有些项目中需要配置,或者该配置在每个项目中配置的值不同。
比如:spring.application.name每个项目都需要配置但值不一样,以及有些项目需要连接数据库而有些项目不需要,有些项目需要配置消息队列而有些项目不需要。
项目所公用的配置
是指在若干项目中配置内容相同的配置。
比如:redis的配置,很多项目用的同一套redis服务所以配置也一样。
nacos如何定位一个具体的配置文件
我们需要知道nacos如何去定位一个具体的配置文件,即:namespace、group、Data Id.
通过namespace、group找到具体的环境和具体的项目。
通过Data Id找到具体的配置文件,dataid有三部分组成
比如:content-service-dev.yaml配置文件 由(content-service)-(dev). (yaml)三部分组成
content-service:第一部分,它是在application.yaml中配置的应用名,即spring.application.name:content-service的值(服务名)。
dev:第二部分,它是环境名,通过spring.profiles.active: dev(环境名)指定,
Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类型,本项目选择yaml格式类型。
我们启动项目中传入spring.profiles.active的参数决定引用哪个环境的配置文件,例如:传入spring.profiles.active=dev -Dserver.port=8083表示使用dev环境的配置文件即content-service-dev.yaml。
5.2.1添加配置
在nacos配置中心中添加项目配置
![](https://img-blog.csdnimg.cn/img_convert/3e30e4d8232bc68c53590b3d60497c4e.png)
![](https://img-blog.csdnimg.cn/img_convert/931b4625748095552f980487df28fd52.png)
5.2.2使用nacos中的配置
在对应工程的pom中添加nacos配置文件依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在对应的工程下的bootstrap.yml中添加:
#微服务配置
spring:
application:
name: content-api #服务名 content-api -dev. yaml
cloud:
nacos:
server-addr: nacos地址:8848
discovery: #服务注册配置
namespace: 667fc5d8-1dbf-4b91-a541-9105a4fc08c4 #命名空间id
group: xuecheng-plus-project
config: #配置文件配置(使用nacos中的配置)
namespace: 667fc5d8-1dbf-4b91-a541-9105a4fc08c4
group: xuecheng-plus-project
file-extension: yaml
refresh-enabled: true
extension-configs: #扩展配置文件的方式引用service工程所用到的配置文件
- data-id: content-service-${spring.profiles.active}.yaml
group: xuecheng-plus-project
refresh: true
shared-configs: #引入公用配置
- data-id: swagger-${spring.profiles.active}.yaml
group: xuecheng-plus-common
refresh: true
- data-id: logging-${spring.profiles.active}.yaml
group: xuecheng-plus-common
refresh: true
profiles:
active: dev #环境名
5.2.3配置优先级
到目前为止已将所有微服务的配置统一在nacos进行配置,用到的配置文件有本地的配置文件bootstrap.yaml和nacos上的配置文件,SpringBoot读取配置文件 的顺序如下:
![](https://img-blog.csdnimg.cn/img_convert/7bf6be424a97cce5a66db4a3fddd97a8.png)
引入配置文件的形式有:
1、以项目应用名方式引入
2、以扩展配置文件方式引入
3、以共享配置文件 方式引入
4、本地配置文件
各配置文件 的优先级:项目应用名配置文件 > 扩展配置文件 > 共享配置文件 > 本地配置文件。