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)

相关推荐
Java识堂2 小时前
如何对微服务进行拆分?
微服务·云原生·架构
就改了5 小时前
微服务接口性能优化:CompletableFuture 并行聚合实践
java·微服务·性能优化
2601_961845157 小时前
专升本资料哪个好|教材+真题+网课对比推荐PDF
考研·http·微服务·容器·visual studio
heimeiyingwang7 小时前
【架构实战】网关架构设计:微服务的统一入口
微服务·云原生·架构
真实的菜7 小时前
微服务架构痛点
java·微服务·架构
小毕超8 小时前
基于A2A + AgentScope + Nacos 构建分布式高可用异构 Agent 方案
nacos·a2a·agentscope
sbjdhjd8 小时前
04 (下) | K8S微服务实战:从 Service 到金丝雀发布
运维·微服务·云原生·kubernetes·开源·云计算·excel
星辰徐哥18 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
Jinkxs18 小时前
Prometheus - 监控微服务:Spring Boot 应用指标暴露与监控
spring boot·微服务·prometheus
sbjdhjd1 天前
04(上)| k8s中的微服务
微服务·云原生·kubernetes·开源·云计算·excel·kubelet