声明:nacos 版本为2.1.1,错误为config data not exist
通过open api读取nacos配置是一个很常规的操作。在阅读了官方文档后,通过官方文档的api接口访问出现:
{"timestamp":"2025-03-20T06:36:40.141+00:00","status":404,"error":"Not Found","path":"/nacos/v2/cs/config"}
官方提供的2.x的api接口为/nacos/v2/cs/config,实测找不到path,使用/nacos/v1/cs/configs不会报错。
在确定api接口没有问题的前提下我们可以通过拼好的url进行get请求访问,这里我用python代码简单举个例子。
import requests
# Nacos 服务地址
nacos_server = 'http://xxxxxxx'
# 配置 ID
data_id = 'xxxx'
# 配置分组
group = 'gateway'
# 租户信息(可选)
tenant = 'xxxxxx'
# 用户名
username = 'xxxxxx'
# 密码
password = 'xxxxxxx'
# 构建请求 URL
url = f'{nacos_server}/nacos/v2/cs/config?dataId={data_id}&group={group}&tenant={tenant}&username={username}&password={password}'
try:
# 发送带有基本认证的 GET 请求
response = requests.get(url)
# 检查响应状态码
if response.status_code == 200:
print('配置内容:', response.text)
else:
print(f'请求失败,状态码:{response.status_code},错误信息:{response.text}')
except requests.RequestException as e:
print(f'请求发生错误:{e}')
代码很简单,但其中的坑很多。在官方文档2.x中并没有提到tenant这个参数,只是有namespaceId(可选)这个参数。但查阅了很多资料,表示tenant和namespaceId是同样的效果,感兴趣的朋友可以查一下。
你以为到这里就结束了么,我们就可以成功的获取到配置了么?答案是否定的。
开始获取配置,输入所需参数,运行代码,出现报错 404,config data not exist。
开始排查各种可能出现问题的原因,参数有没有写错,用户是否有权限,排查了一遍都没有发现问题。
开始读取各个namespace下的配置测试,都读取不到。因为public是保留空间,里面没有配置。除了public,其他的ns都读取了一遍,结果都是同样的config data not exist。
突发奇想,在public里面创建了一个配置,测试读取,可以读到…
观察public和其他的ns有什么不同。
从图中可以看到public 没有后面的一串id。
我们在创建ns的时候会发现,如果没有指定ns id会自动生成
将prod的nsId 传参为tenant的值进行读取,成功获取到配置。
总结:nacos 2.1.1使用的api和1.x的相同,传递请求参数时,tenant要使用namespace 的 id 而不是namespace的名称。