alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
30.21k stars 12.83k forks source link

控制台中更改服务实例的元数据,是否会被实例的下一次心跳覆盖 #5058

Closed wanghuigithub closed 3 years ago

wanghuigithub commented 3 years ago

Nacos版本:1.4.0

在控制台中进行服务实例的元数据修改。本次修改的数据是不是会被 实例的下一次心跳中携带的元数据覆盖掉

realJackSun commented 3 years ago

nacos有几种方式,SCA、Dubbo、控制台、OpenAPI、Client,可以修改后台数据。 您的意思我理解是用SCA、Dubbo、Client等方式注册了服务,然后用控制台更改了服务实例的元数据,修改的元数据可能会被其他方式上报的心跳所覆盖。

我用Dubbo试了一下,不会被覆盖掉;SCA有待进一步测试。 OpenAPI也不会上报心跳,所以排除。 Nacos-Client方式倒有可能会导致您说的问题,(前提是必须用

public void registerInstance(String serviceName, Instance instance)

这个API)

但手动在控制台修改一个非持久化实例的元数据,本身就是一种违规操作;正确的做法是用下面这个API来修改metadata

public void updateInstance(String serviceName, Instance instance)

wanghuigithub commented 3 years ago

nacos有几种方式,SCA、Dubbo、控制台、OpenAPI、Client,可以修改后台数据。 您的意思我理解是用SCA、Dubbo、Client等方式注册了服务,然后用控制台更改了服务实例的元数据,修改的元数据可能会被其他方式上报的心跳所覆盖。

我用Dubbo试了一下,不会被覆盖掉;SCA有待进一步测试。 OpenAPI也不会上报心跳,所以排除。 Nacos-Client方式倒有可能会导致您说的问题,(前提是必须用

public void registerInstance(String serviceName, Instance instance)

这个API)

但手动在控制台修改一个非持久化实例的元数据,本身就是一种违规操作;正确的做法是用下面这个API来修改metadata

public void updateInstance(String serviceName, Instance instance)

1、我是使用的/nacos/v1/ns/instance/beat这个open api来一直发送心跳。 2、SCA是指? 3、不建议使用控制台更新实例的元数据?主要是看到在Nacos控制台中是可以修改实例的元数据的。 所以问下这块的使用问题。

KomachiSion commented 3 years ago
  1. 目前如果临时实例没有续上心跳导致被摘除后,再被心跳续约回去,会导致元数据被心跳信息覆盖,但是是正常现象。
  2. 使用/nacos/v1/ns/instance/beat发送心跳没有问题,在没有因删除/非健康移除等问题导致实例被删除情况下,beat接口不会覆盖已有任何信息
  3. SCA=Spring Cloud Alibaba
  4. 可能是他的表述错误,应该是不推荐用client的register和update接口来更新元数据,而应该通过控制台/openAPI来更新元数据。