今天主要从SpringCloud源码层面谈一下EurekaClient组件注册流程
我们大家在开发Spring应用程序的时候,项目的启动类往往是XXXApplication,我们在该类的上面会加上一堆的注解,但是最常见的注解就是@EnableDiscoveryClient,今天我们就来谈谈它.
通过这个注解的名称我们可以猜测,大致的意思是启用客户端发现,我们来具体看一下,我们点击进去我们会看到一个这样的注释Annotation to enable a DiscoveryClient implementation.
我们可以看出DiscoverClient这个类就是相关的实现类,接着我们找到这个类,这个类有一个很诱人的方法register(),我们把目光转移到这个方法,该方法标注了Register with the eureka service by making the appropriate REST call.
果然没猜错,就是这个方法来向EurekaServer注册服务,那么我们来看看是什么时机触发这个register方法呢,我们来看看调用链
我们重点关注下DiscoveryClient这个类,有两处调用点一个是构造方法中调用,一个是renew()方法中调用,构造方法中调用的触发点在Eureka客户端启动时立即触发,接下来我们重点讨论下renew方法.
方法上注明了,Renew with the eureka service by making the appropriate REST call
很明显是再次发起请求给EurekaServer进行服务更新,也就代表了renew方法的名称
我们再来看看renew()方法的被谁调用
看到了Thread类,哇,这个类肯定是在哪被start了吧,我们接着继续看下去
最终我们定位到了private final ScheduledExecutorService scheduler,是一个定时任务驱动的,定时任务是30秒调用一次维持心跳
总结一下:
EurekaClient注册流程,客户端starting的时候会触发Discovery的register()方法进行注册,之后的每30秒EurekaClient主动向EurekaServer发请求进行心跳检测,接下来的文章我会详细讨论Eureka客户端注册和维持心跳的核心方法register()详细分析
网友评论