开发者社区 > 云原生 > 正文

Nacos单节点服务注册后立刻查询,无法获取到服务实例

Nacos Server Verison :2.1.2 我使用python脚本操作Nacos单台节点IP。 在注册后立刻查询,无实例返回(不管是注册临时节点还是持久节点)。 但是注册后线程sleep1秒,就可以查询到,请问有办法解决么? 我们有需求场景对读写一致性要求很高, 希望客户端注册到Nacos一台节点上后,立刻查询该节点能查询到注册的实例

import time import requests

params = {'ip': '192.168.20.110', 'port': '8002','serviceName':'Python'} url = "http://10.254.107.230:8848/nacos/v1/ns/instance" res = requests.post(url, params=params) print(res.text)

time.sleep(1)

params = {'ip': '192.168.20.110', 'port': '8002','serviceName':'Python'} url = "http://10.254.107.230:8848/nacos/v1/ns/instance/list" res = requests.get(url, params=params) print(res.text)

params = {'ip': '192.168.20.110', 'port': '8002','serviceName':'Python'} url = "http://10.254.107.230:8848/nacos/v1/ns/instance" res = requests.delete(url, params=params) print(res.text)

原提问者GitHub用户guozongkang

展开
收起
学习娃 2023-05-22 15:27:01 189 0
1 条回答
写回答
取消 提交回答
  • 看了一下 server,在注册上的处理是用事件传播,异步完成的。也就是说,注册的时候,只保留一下元数据然后就直接返回给客户端了,注册是异步做的。

    1、异步化增加吞吐,注册完立刻去查询有可能获取不到最新数据。 2、集群之间同步也是异步的,AP协议只保证最终一致。

    如果有这种强烈一致的诉求, 可以自行修改一下源代码,将读取服务的接口由读取缓存改为主动刷新数据后再读取数据。这样导致的问题是每次查询都会重新生成一遍数据,即使数据未变化,导致的代价就是rt略微增加,cpu损耗增加。如果可以接受的话可以如此修改后自行使用。

    原回答者GitHub用户Daydreamer-ia

    2023-05-22 20:28:07
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Nacos架构&原理 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-使用Nacos进行服务的动态发现和流量调度 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载