微服务系列:Nacos 之命名空间、分组和 DataID 三者关系

8,255 阅读4分钟

本来这篇文章的内容是放在上面这篇文章中的,但是考虑到文章长的话影响阅读体验,就单独拆了出来。

话不多说,让我们来康康命名空间、分组和 DataId 这三个东西。

命名空间、分组、DataID

  • Namespace + Group + DataId 三者关系 类似 Java 里面的 package 包名和类名,最外层的 Namespace 是可以用来区分部署环境的,Group 和 DataId 逻辑上区分两个目标对象。

  • 默认情况 Namespace=public, Group=DEFAULT, 默认 Cluster 是 DEFAULT

1. 命名空间(Namespace

1)什么是命名空间?

命名空间,即 Namespace,用于进行粗粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

举个贴切的例子:

一个超市,内部有很多区域,比如零售休闲区、瓜果蔬菜区、生鲜区等等,顺着超市路标指引,我们如果买鱼,直接去生鲜区即可,我们买零食,直接去零食休闲区即可,买个东西无需在超市乱窜…这种区域划分呢,便是物以类聚,环境隔离的思想。我们 Nacos 的 Namespace 思想就如同超市中不同大类型的划分区域。

Nacos 中存在一个默认的命名空间 public,所有配置以及服务注册,在没有指定命名空间时都会默认从 public 这个命名空间拉取配置以及注册到该命名空间下的注册表中。

image.png

可以看到,我们之前的服务注册列表以及配置列表都在这个默认的命名空间 public 下。

image.png

2)命名空间的使用

我们来新建两个环境的命名空间 dev 和 test

image.png

配置列表中就出现了两个 tab

image.png

我们把原来的配置克隆到新的命名空间下

image.png

然后需要我们在 bootstrap.yml 中配置一下使用的命名空间

server:
  port: 9201

# Spring
spring:
  application:
    # 应用名称
    name: cloud-nacos-provider
  profiles:
    # 环境配置
    active: test
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        # 服务注册到哪个命名空间
        namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 服务从哪个命名空间拉取配置
        namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
        - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

增加 spring.cloud.nacos.discovery.namespacespring.cloud.nacos.config.namespace 配置,值就是我们控制台创建时候生成的 命名空间id

我们这里是注册到了 test 命名空间下,启动项目会发现已成功注册。

image.png

test 命名空间下的 cloud-nacos-provider-test.yml 的配置如下:

image.png

还是访问我们之前的测试接口 http://localhost:9201/config/get

image.png

3)注意事项

  • 同名的命名空间只能创建一个!
  • 微服务间如果没有注册到一个命名空间下,无法使用 OpenFeign 指定服务名负载通信(服务拉取的配置文件不同命名空间不影响)即服务间如果需要通信,则需要保证其 discovery 要在一个命名空间下(实际上一般都不会更改服务注册的命名空间)

2. 分组(Group

Nacos 中的一组配置集(一个配置集就是一个配置文件),是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

个人觉得 Group 类似于更细粒度一些的配置隔离。

举个通俗的例子:

我们还是用超市来举例,零食区中,薯片是放一个柜,糖是放一个柜;水产区,鲫鱼与鲫鱼是在一起的!基围虾和基围虾是放在一起的,这便是分组。

image.png

配置步骤和上面命名空间配置类似,就不详细写下了。

注意事项

  • Group+DataId 组合是唯一的,即同一分组下,不会出现多个相同 DataId 的配置;
  • Group 间服务仍是隔离的,即服务注册到不同的分组时,无法使用 OpenFeign 指定服务名负载调用;
  • Namespace+Group+DataId组合是唯一的,即不同命名空间下可有相同分组以及相同DataId,但同一个命名空间下Group与DataId则是唯一的。

PS:都看到这里了,点个赞吧,彦祖!

image.png