跳转到内容
OpenClaw 不踩坑恶意 Skills ,企业需 Skills Registry:Nacos 3.2 发布点此了解

SDK 运行时指南

SDK 运行时指南关注应用启动之后发生的事:客户端如何连接 Nacos,如何监听配置和订阅服务,网络抖动时怎样恢复,以及哪些本地数据可以作为临时兜底。

这篇文档不替代具体语言 SDK 的 API 手册。它说明 Client SDK 的共同运行时语义。Java SDK 是当前基准实现,Go、Python 等语言 SDK 会按语言能力逐步对齐。

1. Client SDK 的边界

业务应用优先使用 Client SDK。它面向应用运行时,适合做这些事情:

  • 读取已知配置,并监听这些配置的变更。
  • 注册和注销当前应用实例。
  • 查询和订阅已知下游服务。
  • 查询、订阅或注册运行时 AI 资源,例如 MCP endpoint、Agent endpoint、Prompt、Skill 和 AgentSpec。
  • 在连接恢复后,尽量恢复应用已经声明过的监听、订阅和临时实例注册。

Client SDK 不适合做大范围管理。不要用它来列举全部命名空间、全部配置、全部服务或全部客户端。配置批量管理、审计、运维查询和服务端状态调整,应使用 Admin API、Console API 或 Maintainer SDK。

2. 初始化时先确定运行时身份

一个 SDK 实例通常绑定一个命名空间。应用需要访问多个命名空间时,建议创建多个 SDK 实例,并在应用退出时关闭这些实例。

初始化时重点确认这些信息:

信息说明
serverAddrendpointserverAddr 适合固定 Nacos 集群地址;endpoint 适合通过地址服务动态获取服务端列表。
namespace当前 SDK 实例访问的命名空间。
groupdataIdserviceName运行时访问资源时使用的业务标识。
usernamepasswordaccessKeysecretKey 等凭据开启鉴权后,SDK 会按服务端鉴权模式携带身份材料。
contextPathNacos HTTP API 的 context path,默认是 nacos
gRPC 端口偏移Nacos 3.x 客户端仍沿用主端口加偏移量的计算方式,默认从 8848 推导出 9848

部署侧需要同时保证 HTTP 端口和 gRPC 端口可达。HTTP 端口用于 OpenAPI、登录和部分兼容请求;gRPC 端口用于大多数客户端长连接请求。

3. 连接不是一次性动作

Nacos 2.x 以后,Client SDK 的主要运行时通道是 gRPC 长连接。客户端会解析服务端地址列表,选择服务端建立连接,并通过健康检查、服务端 reset、地址列表变化等信号触发重连。

连接恢复后,SDK 会把已经声明过的运行时意图重新挂到新连接上。例如:

  • 配置监听会重新同步已知监听项。
  • 服务订阅会重新订阅。
  • 临时实例会重新注册。
  • AI endpoint 和订阅会在对应能力支持时重新恢复。

这类恢复是运行时恢复,不是服务端数据修复。一次写入请求超时后,客户端不能仅凭本地状态判断服务端是否已经成功处理。

4. 配置运行时

配置读取和监听建议遵循几个原则:

  • 应用读取已知 dataIdgroup 的配置,不要在业务运行时做大范围配置搜索。
  • 需要持续感知变更时,使用监听能力,而不是高频轮询。
  • 如果需要“先读当前值,再监听后续变化”,优先使用语言 SDK 中对应的查询并监听方法。
  • 监听回调中避免做长时间阻塞逻辑。需要复杂处理时,把事件交给业务线程池。
  • 配置发布、删除、历史和批量管理属于管理场景,建议使用 Admin API 或 Maintainer SDK。

Java SDK 在本地维护配置 snapshot。服务端查询成功后会写入 snapshot;服务端不可用时,某些读取路径可以使用最后一次成功读取到的本地数据兜底。

本地 failover 文件是更强的本地覆盖能力。它需要用户主动维护,用于 Nacos 服务端不可用、远端配置存在风险或发布窗口需要临时冻结配置时。failover 文件不会自动写回服务端。

5. 服务发现运行时

服务发现运行时围绕注册、订阅和本地服务视图工作。

  • 临时实例适合普通应用实例。连接断开后,服务端会清理连接维度的临时状态;客户端重连后会 redo 注册。
  • 持久化实例适合需要由服务端健康检查维护状态的场景。它的生命周期不只绑定到客户端连接。
  • 订阅服务时,客户端会接收服务端 push,并维护本地服务视图。
  • 本地缓存只是最后一次已知的服务视图,不是服务端权威状态。
  • 开启推空保护后,客户端可以忽略异常的空实例列表,避免可用服务视图被意外清空。

如果服务端不可用,客户端可能暂时使用本地缓存或 failover 视图。业务调用方仍应保留自己的超时、重试和熔断策略。

6. AI 资源运行时

AI 管理中心中的部分资源也会进入运行时。应用可以查询 Prompt、Skill、AgentSpec,或者注册 MCP endpoint、Agent endpoint,并订阅资源变化。

AI 运行时和配置、服务发现一样,也需要区分“资源管理”和“运行时使用”:

  • 创建、发布、上线、下线、导入和治理资源属于管理动作。
  • 应用运行时查询、下载、订阅和注册 endpoint 属于 Client SDK 或 Client API 场景。

更多资源模型请阅读 AI 管理中心

7. 本地缓存、failover 和 redo

SDK 运行时会使用几类本地或内存数据:

数据用途注意事项
配置 snapshot保存最后一次成功读取到的配置内容。只用于恢复读取,不代表服务端最新状态。
配置 failover 文件用户主动维护的本地配置覆盖。优先级高,但不会写回服务端。
服务本地缓存保存最后一次已知服务实例视图。适合作为短期兜底,不应长期替代服务端。
服务 failover 数据开启 failover 时覆盖服务发现结果。只影响本地发现视图。
redo 数据记录订阅、临时实例注册等运行时意图。重连后用于恢复,不代表写入已经持久化。

这些数据的共同点是:它们都不是服务端权威状态。排障时要同时看客户端日志、服务端状态和管理 API 结果。

8. 运行期排障

遇到客户端问题时,可以先按下面顺序排查:

现象排查方向
启动后无法连接检查 serverAddrendpoint、HTTP 端口、gRPC 端口、context path 和网络策略。
鉴权失败检查服务端鉴权插件、客户端凭据、token 刷新、RAM/OIDC 等身份模式是否匹配。
配置监听不触发检查 dataIdgroupnamespace 是否一致,确认客户端连接是否反复重连。
服务订阅结果为空检查服务名、group、cluster、实例健康状态和推空保护配置。
网络抖动后实例消失检查临时实例 redo 是否恢复,确认客户端是否已重新连接。
本地缓存数据不符合预期检查 JM.SNAPSHOT.PATH、failover 开关和缓存文件是否被人工修改。

Java SDK 的常用本地路径包括:

  • JM.LOG.PATH:客户端日志根目录,默认在用户目录下的 logs 目录。
  • JM.SNAPSHOT.PATH:配置和服务本地缓存根目录,默认在用户目录下。

更多 Java SDK 参数请阅读 Java SDK 配置参数。服务端端口和部署边界请阅读 部署手册

9. 关闭 SDK

应用退出或不再使用 SDK 实例时,应调用对应语言 SDK 的关闭方法。关闭会释放连接、后台任务、监听和订阅上下文。

关闭 SDK 不会删除用户维护的 failover 文件,也不会把本地缓存写回服务端。