本来这篇文章的内容是放在上面这篇文章中的,但是考虑到文章长的话影响阅读体验,就单独拆了出来。
话不多说,让我们来康康命名空间、分组和 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 这个命名空间拉取配置以及注册到该命名空间下的注册表中。
可以看到,我们之前的服务注册列表以及配置列表都在这个默认的命名空间 public 下。
2)命名空间的使用
我们来新建两个环境的命名空间 dev 和 test
配置列表中就出现了两个 tab
我们把原来的配置克隆到新的命名空间下
然后需要我们在 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.namespace 和 spring.cloud.nacos.config.namespace 配置,值就是我们控制台创建时候生成的 命名空间id
我们这里是注册到了 test 命名空间下,启动项目会发现已成功注册。
test 命名空间下的 cloud-nacos-provider-test.yml 的配置如下:
还是访问我们之前的测试接口 http://localhost:9201/config/get
3)注意事项
- 同名的命名空间只能创建一个!
- 微服务间如果没有注册到一个命名空间下,无法使用 OpenFeign 指定服务名负载通信(服务拉取的配置文件不同命名空间不影响)即服务间如果需要通信,则需要保证其 discovery 要在一个命名空间下(实际上一般都不会更改服务注册的命名空间)
2. 分组(Group)
Nacos 中的一组配置集(一个配置集就是一个配置文件),是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
个人觉得 Group 类似于更细粒度一些的配置隔离。
举个通俗的例子:
我们还是用超市来举例,零食区中,薯片是放一个柜,糖是放一个柜;水产区,鲫鱼与鲫鱼是在一起的!基围虾和基围虾是放在一起的,这便是分组。
配置步骤和上面命名空间配置类似,就不详细写下了。
注意事项
Group+DataId组合是唯一的,即同一分组下,不会出现多个相同 DataId 的配置;Group间服务仍是隔离的,即服务注册到不同的分组时,无法使用 OpenFeign 指定服务名负载调用;Namespace+Group+DataId组合是唯一的,即不同命名空间下可有相同分组以及相同DataId,但同一个命名空间下Group与DataId则是唯一的。
PS:都看到这里了,点个赞吧,彦祖!