《微服务》04-Nacos配置参数
前言
话接上文,我们介绍完了nacos的环境搭建、单节点部署和集群方式部署,这个章节我们介绍nacos的一些配置参数。
namespace命名空间
在项目开发过程中,我们可以选择一个项目对应一个注册中心,也可以选择多个项目共用一个注册中心。一个项目对应一个注册中心,相当于每个项目都需要重新搭建一个nacos服务端,对于服务器资源、人力资源都是一个重复的浪费,所以为了能够提高资源的复用,我们建议搭建一个公用的nacos注册中心,多个项目共用这个注册中心。
多个项目公用注册中心,就涉及到多项目服务管控的问题,而namespace
命名空间很好的解决了这个问题。使用不同的namespace
,可以将不同项目的相关数据隔离开,便于管理。
nacos默认的命名空间是public
,命名空间可以在nacos管理平台的“命名空间”管理模块中配置,如下图:
我们可以新建命名空间,假设我们以我们测试的项目名新建一个命名空间:
注意,这里的命名空间id才是我们需要配置到nacos客户端的,而不是命名空间名称,如果命名空间id不填,则系统会自动创建一个字符串。这里为了演示区别,以及在客户端的配置,所以不填写,让系统自动生成。
保存之后就可以在列表看到这个命名空间:
进入“服务列表”模块中,我们就能看到新建的命名空间:
这样,我们在nacos客户端中修改application.yml配置,增加命名空间,就可以将我们的nacos客户端注册到相对应的命名空间下了,修改的配置文件代码如下:
server:
port: 8010
spring:
application:
name: app-user-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8840
username: nacos
password: nacos
namespace: 7da84257-4c29-4422-88d1-93ca961234dd
可以看到namespace
配置为lifehelper
的命名空间id,注意,这里是id!!!不是命名空间名称,配错了,可是不会注册到nacos服务端的。
当然如果不配置,默认是注册到public
命名空间里面,我们启动nacos客户端,刷新nacos管理平台的服务列表,就能在lifehelper
的列表中看到服务注册了,而public
里面没有注册。
命名空间也可以应用在集群上,对集群进行分组,原理差不多,这里不再实验,有兴趣的可以自己去尝试,接下去我们讲解分组配置。
分组配置
分组配置和命名空间配置其实作用是差不多的,只是命名空间主要用于例如项目这样大颗粒度的数据分组,而分组设置则是用于更细粒度的分组,大家在nacos管理平台的服务列表里面可以看到一列“分组名称”这个就是服务的分组,默认是DEFAULT_GROUP
。
这个分组的作用,我们可以用来做线上环境和测试环境的数据隔离,这样我们不用一直在线上环境和线下环境之间不断的修改配置。例如我们可以给线上环境的分组取名为pro
,测试环境取名为dev
,当项目部署到线上的时候,在application.yml中,将分组设置为pro
,那么项目启动,读取的配置就是从pro
组中读取,这样就能做到线上和测试环境的配置数据隔离。
这种的用法,我们会涉及到nacos的配置中心的使用,所以这个配置我们后续在讲解到配置中心的时候,再进行说明,我们现在可以先打开nacos的配置中心看看,分组配置对应配置中心的Group
列,如下图:
接下来我们看看,在nacos客户端怎么配置分组,配置文件如下:
server:
port: 8010
spring:
application:
name: app-user-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8840
username: nacos
password: nacos
namespace: 7da84257-4c29-4422-88d1-93ca961234dd
group: dev
权重配置
权重配置主要是用于请求分流的,权重越大,分担到的流量就越大,这个在nacos管理平台可以配置,也可以在各自的nacos客户端配置文件中配置。
-
管理平台配置 打开服务列表,点进具体服务---->查看详情,在详情页的 集群
卡片里面可以看到服务的节点列表,点开具体节点的编辑页面,可以直接修改权重,权重越高,分配到的流量就越多,修改方式见下图:
2. nacos客户端配置 可以直接在application.yml文件中配置,配置文件如下:
server:
port: 8010
spring:
application:
name: app-user-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8840
username: nacos
password: nacos
namespace: 7da84257-4c29-4422-88d1-93ca961234dd
group: dev
weight: 1
nacos客户端临时实例
要说到nacos客户端的临时实例配置,我们需要先了解一下nacos客户端的两种健康检查模式:Agent上报
和服务端主动检测
。
-
Agent上报
客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔5秒,nacos服务端会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除。 -
服务端主动检测
nacos服务端主动探知客户端健康状态,默认间隔为20秒,健康检查失败后实例会被标记为不健康,不会被立即删除。
nacos客户端的临时实例是通过Agent上报模式上报健康的,默认也是通过Agent上报模式。可以通过ephemeral
配置属性来修改,这个属性默认是false
:
server:
port: 8010
spring:
application:
name: app-user-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8840
username: nacos
password: nacos
namespace: 7da84257-4c29-4422-88d1-93ca961234dd
group: dev
weight: 1
ephemeral: true
配置为true后,这个客户端在注册中心的实例就变成持久化的了。
ephemeral
属性介绍
该字段表示注册的实例是否是临时实例还是持久化实例。如果是临时实例,则不会在nacos服务端持久化存储,需要通过上报心跳的方式进行保活,如果一段时间内没有上报心跳,则会被nacos服务端摘除。在被摘除后如果又开始上报心跳,则会重新将这个实例注册。持久化实例则会持久化被nacos服务端,此时即使注册实例的客户端进程不在,这个实例也不会从服务端删除,只会将健康状态设为不健康。
同一个服务下可以同时有临时实例节点和持久化实例节点,这意味着当这服务的所有实例进程不在时,会有部分实例节点从服务上摘除,剩下的实例则会保留在服务下。
这个特性比较适合那些需要应对流量突增,而弹性扩容的服务,当流量降下来后这些实例自己销毁自己就可以了,不用再去nacos里手动调用注销实例。持久化以后,可以实时看到健康状态,便于做后续的告警、扩容等一系列处理。如下图,在实例详情里面可以看到是否临时的配置:
总结
以上就是个人认为在实际项目应用过程中,可能会使用上的一些nacos配置参数,如果后续还有其他参数会在实际开发中使用到,我会再做补充,也欢迎大家一起补充。