Nacos 多语言客户端

Nacos 不是 Java 专属:官方与社区提供多语言 SDK,其余场景还能直接走 OpenAPI。本章介绍 SDK 全景,并给出 Go、Python 的简例。

SDK 一览

语言SDK维护方说明
Javanacos-client官方功能最全,能力最先落地
Gonacos-sdk-go官方注册、发现、配置均支持
Pythonnacos-sdk-python官方轻量接入常用
C++nacos-sdk-cxx官方面向 C/C++ 服务
Node.jsnacos-sdk-nodejs社区可满足多数 JS 场景
C#/.NETnacos-sdk-csharp社区.NET 生态使用

具体版本与仓库以官方文档"多语言 SDK"页为准,优先选用官方维护的版本。

Go 客户端:注册实例

Go SDK 以客户端配置 + 服务器列表创建命名客户端,再注册实例(以下代码需放入 main 函数,并引入 github.com/nacos-group/nacos-sdk-go/v2):

clientConfig := constant.ClientConfig{
    NamespaceId: "public",
    TimeoutMs:   5000,
}
serverConfigs := []constant.ServerConfig{
    {IpAddr: "localhost", Port: 8848},
}
namingClient, err := clients.NewNamingClient(vo.NamingClientParam{
    ClientConfig:  clientConfig,
    ServerConfigs: serverConfigs,
})
ok, err := namingClient.RegisterInstance(vo.RegisterInstanceParam{
    Ip:          "192.168.1.20",
    Port:        8081,
    ServiceName: "order-service",
    Weight:      1,
})
fmt.Println(ok, err) // 输出:true <nil>

Go 客户端:获取与监听配置

配置侧创建 ConfigClient,getConfig 拉取,ListenConfig 挂监听:

configClient, err := clients.NewConfigClient(vo.ConfigClientParam{
    ClientConfig:  clientConfig,
    ServerConfigs: serverConfigs,
})
content, err := configClient.GetConfig(vo.ConfigParam{
    DataId: "order-service.properties",
    Group:  "DEFAULT_GROUP",
})
fmt.Println(content) // 输出:timeout=5000

Python 客户端

Python 用 nacos-sdk-python,接口风格与 Go 类似,注册与读配置各一行:

from nacos import NacosClient

client = NacosClient("127.0.0.1:8848", namespace="public")
print(client.add_naming_instance("order-service", "192.168.1.30", 8082))
# 输出:True
print(client.get_config("order-service.properties", "DEFAULT_GROUP"))
# 输出:timeout=5000

无 SDK 场景:直接走 OpenAPI

没有官方 SDK 的语言、脚本、Postman 调试,直接调 HTTP 接口即可:服务注册/查询复用第 5 章的 /nacos/v1/ns/instance,配置发布/获取复用第 7 章的 /nacos/v1/cs/configs。服务端开启鉴权后,这些请求要带上登录换取的 accessToken,见第 15 章。

gRPC 端口提醒

2.x 的 SDK 默认通过 gRPC 与 8848+1000=9848 端口通信,只放行 8848 会导致 SDK 注册、订阅失败,防火墙要同时开放:

firewall-cmd --permanent --add-port=8848/tcp --add-port=9848/tcp
firewall-cmd --reload

云服务器同理,安全组里把 8848 与 9848 一起加进去。

小结

多语言接入的规律是相通的:配好 server-addr/namespace,Java/Go/Python 各自用 SDK 做注册、发现、读写配置;没有 SDK 就调 OpenAPI。唯一容易踩的坑是忘了放行 gRPC 的 9848 端口。

笔记加载中…