Nacos 注册中心源码拆解:服务注册 + 心跳 + 拉取全链路
引言 "一个实例已经下线 20 秒了,消费者还在往它上面发请求,每隔一段时间报一批 connect timeout。" 排查时发现 Nacos 控制台里这个实例先变红(不健康)、过一会儿才彻底消失,而消费端的地址列表更新又比控制台晚了好几秒——三层时间差叠在一起,就是那批超时的全部来源。 要算清这笔时间账,光靠"知道 Nacos 有心跳、有推送"是不够的,必须回答四个源码级问题:服务实例是什么时候、被谁注册上去的?心跳 5 秒一次是谁在发,服务端凭什么 15 秒判不健康、30 秒才摘除?消费者本地的地址列表多久更新一次,UDP 推送和定时拉取到底谁兜底? 这篇文章以 spring-cloud-alibaba 2.2.x + nacos-client 1.4.x + nacos-naming 1.4.x(HTTP 心跳模式)为准,按一条实例从启动到被发现的真实路径,把 NacosServiceRegistry、NamingProxy、ServiceManager、BeatReactor、HostReactor、PushReceiver 六个核心类串起来。代码均有删减只保留主干,文末会单独....