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)。
  • 客户端未加载:检查客户端 namespacegroupfile-extension 是否与服务端一致。

练习#

  1. 创建 devprod 两个命名空间,分别为 order-service 分组发布不同数据库配置。
  2. 使用 curl 读取两个命名空间下相同 DataId 的配置,对比输出。
  3. DataIdorder-service-db.yaml 改为 order-service-db.properties,调整 type 并验证读取结果。