您当前的位置: 首页 > 

星夜孤帆

暂无认证

  • 1浏览

    0关注

    626博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Nacos心跳机制

星夜孤帆 发布时间:2020-11-14 17:45:42 ,浏览量:1

一、源码流程图

二、客户端

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

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

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

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

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

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

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

三、服务端

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

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

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

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

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

关注
打赏
1636984416
查看更多评论
立即登录/注册

微信扫码登录

0.0378s