服务注册到注册中心的时候已经能接流量了吗?readiness 探针和注册中心什么关系?怎么让预热完成之后才注册?这篇用真实的 Nacos、一个有 3 秒预热的服务和每 20 毫秒调一次的调用方量出来,并如实记录几条没走通的路。
[默认] 以 Tomcat 开始接受连接为 0:实例出现在 Nacos 0.4 秒;/hello 第一次 200 3.4 秒;/actuator/health/readiness 变 200 3.5 秒;ApplicationReadyEvent 3.4 秒
调用方在实例出现在 Nacos 之后每 20 ms 调一次 /hello:成功 81 次,失败(503)121 次注册在 Web 服务器启动时,readiness 在 ReadyEvent 之后,注册中心不看 readiness。
[register-enabled=false + 手工注册] 以 Tomcat 开始接受连接为 0:/hello 第一次 200 3.1 秒;/actuator/health/readiness 变 200 3.4 秒;实例出现在 Nacos None 秒;ApplicationReadyEvent 3.0 秒
调用方在实例出现在 Nacos 之后每 20 ms 调一次 /hello:成功 0 次,失败(503)0 次
应用日志里的相关行:手工调用 NacosServiceRegistry.register(...) | register 抛出 UndeclaredThrowableException: nullregister 抛 UndeclaredThrowableException。
[auto-registration.enabled=false + 手工注册] 以 Tomcat 开始接受连接为 0:/actuator/health/readiness 变 200 3.1 秒;/hello 第一次 200 3.1 秒;实例出现在 Nacos None 秒;ApplicationReadyEvent 3.0 秒
调用方在实例出现在 Nacos 之后每 20 ms 调一次 /hello:成功 0 次,失败(503)0 次
应用日志里的相关行:手工注册失败:registry=null,registration=null相关 bean 都没了。
[instance-enabled=false + 就绪后 setStatus UP] 以 Tomcat 开始接受连接为 0:/actuator/health/readiness 变 200 3.3 秒;/hello 第一次 200 3.3 秒;实例出现在 Nacos None 秒;ApplicationReadyEvent 3.3 秒
调用方在实例出现在 Nacos 之后每 20 ms 调一次 /hello:成功 0 次,失败(503)0 次
应用日志里的相关行:调用 NacosServiceRegistry.setStatus(registration, UP) | setStatus 返回setStatus 之后实例仍不可见,没走通。
[预热在 SmartLifecycle 里] 以 Tomcat 开始接受连接为 0:/hello 第一次 200 0.1 秒;/actuator/health/readiness 变 200 0.4 秒;实例出现在 Nacos 0.9 秒;ApplicationReadyEvent 0.3 秒
调用方在实例出现在 Nacos 之后每 20 ms 调一次 /hello:成功 152 次,失败(503)0 次
应用日志里的相关行:SmartLifecycle(phase 0)开始预热 3 秒 @0.0s | SmartLifecycle 预热完成 @3.0s | Web 服务器启动(WebServerInitializedEvent) @3.3s | ApplicationRunner:预热已经在 SmartLifecycle 里做完,这里什么都不做 @3.4s | ApplicationReadyEvent @3.4s预热放在 Web 服务器启动之前,注册自然延后。