a7895906 2021-04-22 13:50 采纳率: 0%
浏览 195

Nacos发送心跳给注册中心的一台机器,那其他机器是怎么更新心跳时间呢

 


 

简单看了下源码,nacos的AP模式下同步心跳调用的是 InstanceController类下的的/beat方法, 这个方法我看了下代码,并没有向nacos集群内其他节点作同步的逻辑。。 那么集群内其他节点是如何感知客户端实例的呢?  比如说Nacos 集群现在有A,B,C三台机器, 有一个服务S, S一直给A发心跳,并没有给B,和C发 (或者是过了很久才给B和C发), 那么B和C就可能会认为这个服务是不健康的。。这是不是就会产生问题

求有看过源码的大佬能解答我的疑问吗,如果有同步,那代码在哪呢? (注意,是AP模式,不是CP模式)

  • 写回答

1条回答 默认 最新

  • Dr.劳菠萝 2022-01-05 18:44
    关注

    1.我Nacos客户端向服务端注册和发送心跳的时候,会被DistroFilter这个类根据服务名称哈希路由到对应的Nacos节点去处理,Nacos服务端相互都是有心跳所以不必考虑我节点挂掉,挂了我对应的Hash也会变.
    2.假如我的Order服务路由到Nacos3这个节点,我Order集群的注册和心跳都由Nacos3处理,即使你客户端心跳请求到Nacos其他节点也会路由到Nacos3,当客户端第一次注册的时候会初始化一个任务ClientBeatCheckTask,同时client往Nacos3注册完成之后,会同步给其他Nacos节点。
    3.ClientBeatCheckTask他第一步就是根据服务名字去Hash,找一下Order服务是不是属于我这个Nacos3去处理,如果是,则处理心跳,如果健康改变了,通知集群其他节点,失败就无限重试,不同的节点由不同的Nacos服务端去处理

    img

    img

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多