nacos-sdk-cpp icon indicating copy to clipboard operation
nacos-sdk-cpp copied to clipboard

如何使用心跳机制?

Open hjx777 opened this issue 2 years ago • 4 comments

您好,请问注册一个临时实例,如何使用心跳验证的方式保证实例正常呢?样例中没有这样的demo。或许是应该直接使用BeatReactor.h提供的函数?如果方便得话,还请告知,万分感谢。

hjx777 avatar Dec 05 '22 08:12 hjx777

查看了之前的回复,使用临时实例会带有心跳机制,使用NacosNamingService.cpp中的registerInstance(const NacosString &serviceName,const NacosString &groupName,Instance &instance)完成注册,拥有beat信息,但不知道如何使用。注册成功之后在15s后会变成不健康实例,后续被删除。我有两个使用想法,由于对c++掌握程度有限,所以不知道是否正确:

  1. 直接使用BeatTask中run函数,函数中包含sendbeat,应该是实现心跳发送的代码;
  2. 使用NamingProxy下的sendbeat函数 但是我不知道这样是否可行,目前仅需要注册和发送心跳【使用临时实例,使用持久实例出现直接就是非健康实例问题】。我在text中没有找到相似的测试代码,如果能够提供具体说明,将会万分感谢。

hjx777 avatar Dec 06 '22 09:12 hjx777

+1, 就不能提供一个心跳demo吗

xiedeacc avatar Jan 12 '23 10:01 xiedeacc

看了代码后发现,NamingService对象不要析构掉就会定期自动发心跳,nacos::ResourceGuardnacos::NamingService把NamingService指针包好后,处理的不好就会把NamingService析构掉,就没法自动发心跳了

xiedeacc avatar Jan 12 '23 11:01 xiedeacc

注册中心要能够实时知道各个服务实例的状态,通过心跳机制来实现,实例定时向注册中心发送请求,表明自己还活着,如果心跳没了,注册中心就可以对其清理。

为啥不是在你们注册的服务内调用sendbeat 呢?

lzhprigrammer avatar Jan 13 '23 02:01 lzhprigrammer