Nacos注册中⼼的⼼跳机制
微服务与 Nacos 服务器之间的通信过程
在微服务启动后每过5秒,会由微服务内置的 Nacos 客户端主动向 Nacos 服务器发起⼼跳包(HeartBeat)。⼼跳包会包含当前服务实例的名称、IP、端⼝、集名、权重等信
如果你开启微服务 Debug ⽇志,会清晰地看到每 5 秒⼀个⼼跳请求被发送到 Nacos 的 /nacos/v1/ns/instance/beat 接⼝,该请求会被 Nacos 服务器内置的 naming 模块处理。
微服务注册中心有哪些23:11:23.826 DEBUG 10720 --- [ing.beat.sender] s.n.www.protocol.http.HttpURLConnection  : sun.
www.MessageHeader@665891d213 pairs: {PUT /nacos/v1/ns/instance/beat?app=unknown&serviceName=DEFAULT_GROUP%40%40sample 23:11:28.837 DEBUG 10720 --- [ing.beat.sender] s.n.www.protocol.http.HttpURLConnection  : sun.www.MessageHeader@5f00479a12 pairs: {PUT /nacos/v1/ns/instance/beat?app=unknown&serviceName=DEFAULT_GROUP%40%40sample 23:11:38.847 DEBUG 10720 --- [ing.beat.sender] s.n.www.protocol.http.HttpURLConnection  : sun.www.MessageHeader@3521283812 pairs: {PUT /nacos/v1/ns/instance/beat?app=unknown&serviceName=DEFAULT_GROUP%40%40sample
naming模块⼼跳处理流程
naming 模块在接收到⼼跳包后,会按下图逻辑处理⼼跳包并返回响应:
1. naming 模块收到⼼跳包,⾸先根据 IP 与端⼝判断 Nacos 是否存在该服务实例?如果实例信息不存在,在 Nacos 中注册登记该实例。⽽注册的本质是将新实例对象存储
在“实例 Map”集合中;
2. 如果实例信息已存在,记录本次⼼跳包发送时间;
3. 设置实例状态为“健康”;
4. 推送“微服务状态变更”消息;
5. naming 模块返回⼼跳包时间间隔。
到这⾥⼀次完整的⼼跳包处理已完成。
处理不健康⼼跳
那 Nacos ⼜是如何将⽆效实例从可⽤实例中剔除呢?Nacos Server 内置的逻辑是每过 20 秒对“实例 Map”中的所有“⾮健康”实例进⾏扫描,如发现“⾮健康”实例,随即从“实例Map”中将该实例删除。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。