一、源码流程图

nacos心跳机制

二、客户端

当nacos进行服务注册的时候,NacosServiceRegistry.class会调用register()方法进行服务注册,该方法中调用了namingService.registerInstance()方法进行服务注册的逻辑。

nacos心跳机制

nacos心跳机制

NacosNamingService实现了NamingService的接口;然后在namingService.registerInstance()方法中,会做两件事情,第一件事就是组装心跳包BeatInfo,并且发送心跳:

nacos心跳机制

NacosNamingService中的构造函数,会调用init()方法,然后在init方法中会执行一个BeatReactor线程

NacosNamingService中的构造函数和init()方法:

nacos心跳机制

BeatReactor的构造函数中创建了一个ScheduledExecutorService线程操作对象,在里面执行了一个线程操作,BeatTask线程,然后在BeatTask线程中调用了sendBeat()方法,将心跳包作为参数;

nacos心跳机制

BeatTask线程操作:调用sendBeat()方法

nacos心跳机制

在sendBeat()方法中,通过http服务,调用了InstanceController.beat()方法,进行心跳的确认:

nacos心跳机制

三、服务端

在服务端的心跳接口,InstanceController.beat内,会判断实例是否存在,如果不存在,会重新注册。(如网络不通导致实例在服务端被下线,或服务端重启临时实例丢失)

nacos心跳机制

然后,执行service.processClientBeat(clientBeat)方法,调用一个线程任务

nacos心跳机制

在该任务中,将上次的心跳时间,设置为当前时间

nacos心跳机制

至此,nacos发送心跳的过程就到此结束。

参考1参考2参考3流程图链接

相关文章:

  • 2021-09-23
  • 2021-06-21
  • 2021-07-30
  • 2021-09-18
  • 2021-07-19
  • 2021-08-08
  • 2021-12-02
  • 2021-08-30
猜你喜欢
  • 2022-12-23
  • 2021-10-19
  • 2021-10-19
相关资源
相似解决方案