Nacos配置读取异常排查与解决指南

1. 问题现象

在服务启动过程中,出现以下异常:

1.1. Nacos 配置读取异常

复制代码
[Nacos Config] config[dataId=show-prod.yaml, group=DEFAULT_GROUP] is empty

1.2. 客户端报错

复制代码
Client not connected, current status: STARTING

1.3. curl 验证结果

复制代码
curl /nacos/v1/cs/configs → 403 Forbidden

2. 问题影响

  • 部分配置(如 show-prod.yaml)读取为空
  • 导致系统配置不完整
  • 应用启动失败或运行异常

3. 排查过程

3.1. 初步怀疑方向

排查过以下可能性:

  • ❌ 配置文件不存在
  • ❌ namespace 错误
  • ❌ group 不一致
  • ❌ 配置内容为空
  • ❌ Spring 配置加载问题
  • ❌ JDK / jar 差异

👉 均排除

3.2. 通过 curl 验证 Nacos

3.2.1. 登录接口正常
复制代码
POST /nacos/v1/auth/login

✔ 能获取 accessToken

3.2.2. 配置接口异常
复制代码
GET /nacos/v1/cs/configs → 403

👉 初步判断:鉴权或访问异常

3.3. 关键日志定位

应用日志:

复制代码
Client not connected, current status: STARTING

👉 说明:

Nacos 客户端未成功建立连接

3.4. 网络连通性验证(关键步骤)

测试 Nacos gRPC 端口:

复制代码
telnet 192.168.0.220 10825

返回:

复制代码
No route to host

4. 根因分析(最终结论)

4.1. 根因

应用服务器无法访问 Nacos gRPC 端口(10825)

4.2. 原理说明(关键)

Nacos 2.x 使用双通道:

|-----------|------|-------|
| 功能 | 协议 | 端口 |
| 登录/HTTP接口 | HTTP | 9825 |
| 配置监听/同步 | gRPC | 10825 |

4.3. 问题链路

4.4. 为什么会出现"部分成功,部分失败"

  • 部分配置在初始化阶段通过 HTTP 获取(可能成功)
  • 部分配置依赖 gRPC 监听机制(失败)

👉 导致:

复制代码
同一应用:
部分配置 success
部分配置 empty

5. 解决方案

5.1. 方案一:开放 gRPC 端口(推荐)

5.1.1. 服务器防火墙放行
复制代码
firewall-cmd --add-port=10825/tcp --permanent
firewall-cmd --reload
5.1.2. 云服务器安全组放行

开放:

复制代码
端口:10825
协议:TCP
来源:应用服务器IP

5.2. 方案二:验证端口监听

在 Nacos 服务器执行:

复制代码
netstat -lntp | grep 10825

确保端口正常监听

5.3. 方案三(临时):关闭 RPC(不推荐)

复制代码
spring:
  cloud:
    nacos:
      config:
        use-remote-sync-config: false

6. 验证结果

修复后验证:

复制代码
telnet 192.168.0.220 10825

✔ 连接成功

应用启动:

复制代码
Nacos Config 正常加载
不再出现 is empty

7. 经验总结

7.1. Nacos 2.x 必须同时满足:

复制代码
HTTP通 + gRPC通

7.2. 常见误区

|----------------|------------------|
| 误区 | 实际 |
| curl 能通就说明正常 | ❌ 只代表 HTTP 通 |
| is empty 是配置问题 | ❌ 可能是网络/鉴权问题 |
| 403 一定是账号问题 | ❌ 也可能是 token 未携带 |

7.3. 快速排查口诀

复制代码
配置 empty 先别慌
先查 403 和端口
10825 不通
一定有坑

8. 建议优化

8.1. 环境统一

  • 所有环境统一 Nacos 鉴权策略
  • 避免"有的开鉴权,有的不开"

8.2. 网络规范

  • 明确 Nacos 必开端口:
    • 8848 / 9825(HTTP)
    • 9848 / 10825(gRPC)

8.3. 启动检查

上线前增加:

复制代码
telnet nacos-ip 10825

作为健康检查项

9. 最终总结一句话

👉 本问题根因是 Nacos gRPC 端口未打通,导致客户端连接失败,从而引发配置读取异常(表现为 empty)

相关推荐
EatFan1 天前
gRPC 为什么比 HTTP+JSON 快?详细讲解gRPC
后端·微服务·grpc
辛迪聊物业数字化2 天前
智慧物业管理平台架构实践:从SaaS物业云到商管系统的全模块落地
大数据·微服务·php
苏渡苇2 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
叶总没有会2 天前
Nacos—注册中心
spring cloud·微服务
天天喝旺仔2 天前
分布式服务容错实战:用 Sentinel 实现限流、熔断与降级
分布式·微服务·云原生·sentinel
好菇娘の当自强2 天前
【Spring Boot 2.x 与 3.x YAML 配置区别详解】
springboot
cnkeysky2 天前
SpringBoot 整合 nacos 配置中心
nacos·springboot
她说..2 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
cnkeysky3 天前
docker 运行 nacos
docker·nacos
小蒜学长3 天前
大学生健康饮食的智慧管理系统(代码+数据库+LW)
java·后端·springboot·大学生·健康饮食