From 056433d5bbf5e68144a8d80a2b71195c859a056e Mon Sep 17 00:00:00 2001 From: lili Date: Sat, 4 Jul 2026 08:46:53 -0700 Subject: [PATCH] =?UTF-8?q?fix(nacos):=20namespace=20=E5=8F=A3=E5=BE=84?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=20public=E2=86=92=E7=A9=BA=E4=B8=B2=EF=BC=88?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=85=AC=E5=85=B1=E7=A9=BA=E9=97=B4=20namesp?= =?UTF-8?q?aceId=3D=E7=A9=BA=E4=B8=B2=EF=BC=8C=E9=9D=9E=E5=AD=97=E9=9D=A2?= =?UTF-8?q?=E9=87=8F=20public=EF=BC=89=EF=BC=88=E9=85=8D=E7=BD=AE=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E9=9D=A2=E9=98=B6=E6=AE=B5=E4=BA=8C=E5=89=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nacos 默认公共空间的真实 namespaceId 是空串,"public" 只是显示名(namespaceShowName)。 现状代码写 namespace: public 会带 tenant=public 静默落进一个 id 为 public 的空间, 路 B 写读两侧不一致时配置永远推不到(阶段〇同款坑)。真取证: GET /nacos/v1/console/namespaces 返 namespace:"" / namespaceShowName:"public"; nacos-sdk-python v1 client.py 逻辑 `if self.namespace: params["tenant"]=...`——空串不带 tenant=走默认空间。 改动(五处触点,均只动默认公共空间语义处): - game-cloud huijing-server application.yaml:discovery/config 两处 namespace public→""(+中文注释) - tier2 gen-worker service/nacos_registry.py:NACOS_NAMESPACE 默认值 public→""(+中文注释) - tier2 gen-worker tests/test_nacos_registry.py:断言随改 == "public" → == "" - docs/内网凭据与端点.md:Nacos 段补 namespaceId 口径行(空串非 public,写读两侧对齐) 不动:各模块 -dev/-local profile 的 namespace: dev(独立命名空间 dev,非默认公共空间语义); docs/plans 历史留痕档的 public 字面量(留痕层不改)。 验证:nacos_registry 单测 6 passed;application.yaml YAML 语法有效(两处 namespace 落空串); py_compile 通过;docs-gate 6/7 检绿(唯一 G3 死链为 pre-existing、与本改动无关)。 Co-Authored-By: Claude Fable 5 --- docs/内网凭据与端点.md | 1 + game-cloud/huijing-server/src/main/resources/application.yaml | 4 ++-- tier2/gen-worker/service/nacos_registry.py | 4 +++- tier2/gen-worker/tests/test_nacos_registry.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/内网凭据与端点.md b/docs/内网凭据与端点.md index 722ff035..8937f605 100644 --- a/docs/内网凭据与端点.md +++ b/docs/内网凭据与端点.md @@ -70,6 +70,7 @@ canonical: true | **server identity**(server 间鉴权头) | key `nacosServerIdentity` / value `f358e96034ab2cd5e41c1a691b4200bb6f576849d61ed4dd` | | **MySQL 后端** | 复用既有 `100.64.0.8:3306` 的 `nacos` 库(root/`ZRH3jwYLOrntBcTAw29MW9BP`,不新增实例);12 张官方表 | | **部署位置** | mini-infra `/opt/infra-nacos`(compose 源在仓 `deploy/infra/nacos/`);镜像 `nacos/nacos-server:v2.4.3` | +| **命名空间(namespaceId)** | 默认公共空间 = **空串 `""`**,**勿写字面量 `public`**——`public` 只是显示名(namespaceShowName),不是 id。写侧(game-cloud SCA / yudao publish)与读侧(worker nacos_registry / NacosHotConfig)一律用空串;写 `public` 会静默落进另一个空间、配置永远推不到(阶段〇同款坑)。实测 `GET /nacos/v1/console/namespaces` 返 `namespace:""` / `namespaceShowName:"public"`。业务生成配置若要隔离,另建**真实** namespaceId、勿复用显示名 | - **密钥注入**:上面四个密钥在服务器上物化为 `/opt/infra-nacos/.env`(chmod 600、不入仓);本文档是权威副本,compose 文件只用 `${VAR}` 引用、无明文。 - **运维**:起/停 `cd /opt/infra-nacos && docker compose up -d / down`;探活 `NACOS=http://100.64.0.8:8848 bash deploy/infra/nacos/health-check.sh`(绿=readiness 200)。standalone 单机 512m,实测常驻内存 ~627M。 diff --git a/game-cloud/huijing-server/src/main/resources/application.yaml b/game-cloud/huijing-server/src/main/resources/application.yaml index 004d34f9..970b3ef6 100644 --- a/game-cloud/huijing-server/src/main/resources/application.yaml +++ b/game-cloud/huijing-server/src/main/resources/application.yaml @@ -64,10 +64,10 @@ spring: password: ${NACOS_PASSWORD} # 口令走 Spring env 占位符注入,严禁明文入仓(真值=凭据文档 admin 口令) discovery: enabled: true # 重启用 Nacos 服务发现(was false):各 server 按 spring.application.name 注册进 Nacos - namespace: public # 命名空间(B1 部署用 public) + namespace: "" # 默认公共空间 namespaceId=空串,勿写 public(显示名 public≠id,写字面量 public 会静默落错空间) config: enabled: true # 重启用 Nacos 配置中心(was false):从 Nacos 读外部化配置 - namespace: public + namespace: "" # 默认公共空间 namespaceId=空串,勿写 public(同 discovery,写读两侧须一致) file-extension: yaml # 配置文件格式 # Sentinel 入口 QPS 突发保护(切片一 阶段〇 C2):流控规则从 Nacos dataId sentinel-gen-flow-rules 热加载(改即生效、不重启)。 # 职责 = 生成入队入口速率闸(FLOW_GRADE_QPS 削洪峰),与 DB 三门(业务配额)/ C3 consumeThreadMax(dispatch 投递速率上限;真在跑并发≤15 属有界 worker 池=follow-up)三层正交。 diff --git a/tier2/gen-worker/service/nacos_registry.py b/tier2/gen-worker/service/nacos_registry.py index b6d25758..2554bc5c 100644 --- a/tier2/gen-worker/service/nacos_registry.py +++ b/tier2/gen-worker/service/nacos_registry.py @@ -74,7 +74,9 @@ def register(service_host: str, service_port: int) -> None: client = nacos.NacosClient( nacos_addr, - namespace=os.environ.get("NACOS_NAMESPACE", "public"), + # 默认公共空间 namespaceId=空串,勿写 public(显示名 public≠id,写字面量会静默落错空间; + # 与 game-cloud SCA 写读两侧口径一致,Nacos v1/console/namespaces 实测默认空间 namespace="") + namespace=os.environ.get("NACOS_NAMESPACE", ""), username=os.environ.get("NACOS_USERNAME", "nacos"), password=os.environ.get("NACOS_PASSWORD", ""), ) diff --git a/tier2/gen-worker/tests/test_nacos_registry.py b/tier2/gen-worker/tests/test_nacos_registry.py index 0ec46676..3ed1aa80 100644 --- a/tier2/gen-worker/tests/test_nacos_registry.py +++ b/tier2/gen-worker/tests/test_nacos_registry.py @@ -70,7 +70,7 @@ def test_register_calls_add_naming_instance(clean_env): ctor.assert_called_once() c_args, c_kwargs = ctor.call_args assert c_args[0] == f"{_NACOS_HOST}:8848" - assert c_kwargs.get("namespace") == "public" + assert c_kwargs.get("namespace") == "" # 默认公共空间 namespaceId=空串(勿写 public,显示名≠id) assert c_kwargs.get("username") == "nacos" # add_naming_instance:通告 IP(非绑定 0.0.0.0)+ port