1.安装nacos
链接:https://pan.baidu.com/s/1ya4JafcksxADgr39Ibw8kA?pwd=emgq
提取码:emgq
解压完,在bin里面双击startup.cmd启动。
2.nacos入门
服务注册到nacos步骤:
1.在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>
2.添加nacos的客户端依赖
<!-- nacos客户端依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.在application.yml文件添加nacos地址:
spring: cloud: nacos: server-addr: localhost:8848 #nacos服务地址
4.启动nacos,浏览器输入nacos地址
5.用户名和密码
用户名:nacos
密码: nacos
6.服务列表查看启动并注册的服务
![](https://img-blog.csdnimg.cn/ed4cf392fafd47958a15f1a53cc9af9a.png)
3.服务分集存储
nacos中有一个集群的概念,集群就是多台机器干相同的事。比如说厨房中,多个洗菜的可以叫集群,多个切菜的也可以叫集群。
服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,本地集群不可访问时,再去访问其它集群。
nacos默认是只有一个集群的,可以修改application.yml添加下面内容来修改集群
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务端地址
discovery:
cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
nacos默认是随机访问集群的,可以修改application.yml添加下面内容来优先找本地集群服务
1.设置集群名
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务端地址
discovery:
cluster-name: HZ #配置集群名称,也就是机房位置2.设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则Nacos会优先选择同集群服务实例列表,本地集群找不到提供者,才去其它集群寻找,并且会报警告,确定了可用实例列表后,再采用随机负载均衡挑选实例
4.集群负载均衡策略
实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
权重越小被访问的频率越小,也是有可能访问到的。当权重为0时,就不会被访问,可以通过修改权重实现热部署(无需停机重启)。
5.环境隔离
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离,不同隔离直接无法访问,只有在同一个命名空间的服务才可以相互访问。
设置某个服务在这个环境中,在application.yml配置
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #配置集群名称,也就是机房位置
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 #命名空间,填ID
在不同环境中,两个服务相互调用控制台会报下面错误
6.临时实例和非临时实例
服务注册到Nacos时,可以选择注册为临时或非临时实例,通过下面的配置来设置:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例 临时实例宕机时,会从nacos的服务列表中剔除,而非临时实例则不会
nacos和eureka的区别: