9.3.1 配置模型与命名空间/分组/数据ID
配置模型与命名空间/分组/数据ID#
Nacos 配置以“配置集”为基本单元,通过命名空间(Namespace)、分组(Group)和数据ID(DataId)三维模型进行组织与隔离。命名空间用于环境/租户隔离,分组用于同一命名空间内分类,数据ID唯一标识具体配置文件。配置的最终定位由(Namespace, Group, DataId)三元组唯一确定。
配置模型关系图(原理草图):
规范建议与命名示例#
- Namespace:prod / test / dev(或按业务线)
- Group:应用名或模块名(如 order-service)
- DataId:应用名-模块-环境.格式(如 order-service-db.yaml)
推荐命名:
Namespace: prod
Group: order-service
DataId: order-service-db.yaml
示例:通过 Nacos OpenAPI 创建命名空间、发布配置#
1)创建命名空间(API)
# 变量说明:
# NACOS_ADDR: Nacos 地址
# NS_NAME: 命名空间名称
# NS_DESC: 描述
NACOS_ADDR="http://127.0.0.1:8848"
NS_NAME="prod"
NS_DESC="production namespace"
curl -s -X POST "${NACOS_ADDR}/nacos/v1/console/namespaces" \
-d "customNamespaceId=" \
-d "namespaceName=${NS_NAME}" \
-d "namespaceDesc=${NS_DESC}"
预期效果:返回 true 表示创建成功;控制台可见新命名空间。
2)发布配置(API)
# 变量说明:
# NS_ID: 命名空间ID(从控制台或API获取)
# GROUP: 分组
# DATA_ID: 数据ID
# CONTENT: 配置内容
NS_ID="prod"
GROUP="order-service"
DATA_ID="order-service-db.yaml"
CONTENT=$'mysql:\n host: 10.0.0.11\n port: 3306\n user: app\n pass: "secret"\n'
curl -s -X POST "${NACOS_ADDR}/nacos/v1/cs/configs" \
-d "dataId=${DATA_ID}" \
-d "group=${GROUP}" \
-d "content=${CONTENT}" \
-d "type=yaml" \
-d "tenant=${NS_ID}"
预期效果:返回 true 表示发布成功。
3)读取配置(API)
curl -s -G "${NACOS_ADDR}/nacos/v1/cs/configs" \
--data-urlencode "dataId=order-service-db.yaml" \
--data-urlencode "group=order-service" \
--data-urlencode "tenant=prod"
预期效果:返回 YAML 配置内容。
示例:客户端配置文件引用(以 Java/Spring 为例)#
application.properties:
# 关键参数说明:
# namespace/tenant 指定命名空间,group 指定分组,dataId 由应用配置文件名决定
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=prod
spring.cloud.nacos.config.group=order-service
spring.cloud.nacos.config.file-extension=yaml
预期效果:应用启动后自动拉取 order-service-${profile}.yaml 或指定 DataId。
安装与准备(最小可用环境)#
# 以单机为例(依赖 JDK 8+)
wget -O nacos.tar.gz https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.gz
tar -xzf nacos.tar.gz
cd nacos/bin
./startup.sh -m standalone
# 验证端口
ss -lntp | grep 8848
预期效果:8848 端口监听,控制台可访问 http://127.0.0.1:8848/nacos。
排错清单#
- 配置读取为空:确认三元组是否一致(Namespace/Group/DataId),以及
tenant参数是否传入。 - 发布失败返回 403:检查命名空间权限与登录用户权限。
- 内容解析失败:确认 DataId 后缀与
type是否匹配(如 yaml/properties)。 - 客户端未加载:检查客户端
namespace、group、file-extension是否与服务端一致。
练习#
- 创建
dev和prod两个命名空间,分别为order-service分组发布不同数据库配置。 - 使用
curl读取两个命名空间下相同DataId的配置,对比输出。 - 将
DataId从order-service-db.yaml改为order-service-db.properties,调整type并验证读取结果。