Eureka 有个延迟注册的功能,也就是在服务启动成功之后不立刻注册到 Eureka Server,而是延迟一段时间再去注册,这样做的主要目的是因为虽然服务启动成功了,可能还有一些框架或者业务的代码没有初始化完成,可能会导致调用的报错,所以需要延迟注册。
但是发现,然并卵啊,好像这个延迟注册并没有生效,也是开始了排查之路。
延迟注册
首先,延迟注册的功能主要依赖这两个参数,eureka.client.initial-instance-info-replication-interval-seconds
代表第一次初始化延迟注册的时间间隔,eureka.client.instance-info-replication-interval-seconds
则代表后续同步注册的时间间隔。
eureka.client.initial-instance-info-replication-interval-seconds=40 //默认40秒
eureka.client.instance-info-replication-interval-seconds=30 //默认30秒
复制代码
我们从源码先来看是怎么做到延迟注册的,先看 DiscoveryClient
的 initScheduledTasks
,这里创建了同步注册到 Eureka Server 的定时任务。
之后调用 start
方法创建定时任务,并且延迟 40 秒执行,也就是我们达到的延迟注册的效果。
默认的第一次注册,也就是延迟注册的时间是 40 秒,之后每 30 秒会同步注册信息。
但是,即便我们配置了这俩属性,发现好像没什么卵用,接下来我们要排查下到底是为啥捏?