vlambda博客
学习文章列表

《微服务》04-Nacos配置参数

前言

话接上文,我们介绍完了nacos的环境搭建、单节点部署和集群方式部署,这个章节我们介绍nacos的一些配置参数。

namespace命名空间

在项目开发过程中,我们可以选择一个项目对应一个注册中心,也可以选择多个项目共用一个注册中心。一个项目对应一个注册中心,相当于每个项目都需要重新搭建一个nacos服务端,对于服务器资源、人力资源都是一个重复的浪费,所以为了能够提高资源的复用,我们建议搭建一个公用的nacos注册中心,多个项目共用这个注册中心。

多个项目公用注册中心,就涉及到多项目服务管控的问题,而namespace命名空间很好的解决了这个问题。使用不同的namespace,可以将不同项目的相关数据隔离开,便于管理。

nacos默认的命名空间是public,命名空间可以在nacos管理平台的“命名空间”管理模块中配置,如下图:

我们可以新建命名空间,假设我们以我们测试的项目名新建一个命名空间:

《微服务》04-Nacos配置参数

注意,这里的命名空间id才是我们需要配置到nacos客户端的,而不是命名空间名称,如果命名空间id不填,则系统会自动创建一个字符串。这里为了演示区别,以及在客户端的配置,所以不填写,让系统自动生成。

保存之后就可以在列表看到这个命名空间:

《微服务》04-Nacos配置参数

进入“服务列表”模块中,我们就能看到新建的命名空间:

《微服务》04-Nacos配置参数

这样,我们在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里面没有注册。

《微服务》04-Nacos配置参数

命名空间也可以应用在集群上,对集群进行分组,原理差不多,这里不再实验,有兴趣的可以自己去尝试,接下去我们讲解分组配置。

分组配置

分组配置和命名空间配置其实作用是差不多的,只是命名空间主要用于例如项目这样大颗粒度的数据分组,而分组设置则是用于更细粒度的分组,大家在nacos管理平台的服务列表里面可以看到一列“分组名称”这个就是服务的分组,默认是DEFAULT_GROUP

这个分组的作用,我们可以用来做线上环境和测试环境的数据隔离,这样我们不用一直在线上环境和线下环境之间不断的修改配置。例如我们可以给线上环境的分组取名为pro,测试环境取名为dev,当项目部署到线上的时候,在application.yml中,将分组设置为pro,那么项目启动,读取的配置就是从pro组中读取,这样就能做到线上和测试环境的配置数据隔离。

这种的用法,我们会涉及到nacos的配置中心的使用,所以这个配置我们后续在讲解到配置中心的时候,再进行说明,我们现在可以先打开nacos的配置中心看看,分组配置对应配置中心的Group列,如下图:

《微服务》04-Nacos配置参数

接下来我们看看,在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客户端配置文件中配置。

  1. 管理平台配置 打开服务列表,点进具体服务---->查看详情,在详情页的 集群卡片里面可以看到服务的节点列表,点开具体节点的编辑页面,可以直接修改权重,权重越高,分配到的流量就越多,修改方式见下图:

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上报服务端主动检测

  1. Agent上报 客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔5秒,nacos服务端会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除。
  2. 服务端主动检测 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配置参数,如果后续还有其他参数会在实际开发中使用到,我会再做补充,也欢迎大家一起补充。