一.自动装配→一切的起点
1.spring.factories
在SpringCloud
中,一切是基于SpringBoot
构建的,而想要管理spring
或者被spring
管理,那都离不开自动装配。而自动装配离不开spring.factories
。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaClientConfigServerAutoConfiguration,\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\
org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceBootstrapConfiguration
总共要引入6个配置类,那么他们分别是干什么的呢?
1.EurekaClientConfigServerAutoConfiguration
:Eureka 客户端配置类,加载eureka配置文件
2.EurekaDiscoveryClientConfigServiceAutoConfiguration
: 通过配置中心config发现配置文件(这是配合SpringCloud Config使用的,这里不讨论)
3.EurekaClientAutoConfiguration
:EurekaClient核心功能装配,本节核心,稍后梳理
4.RibbonEurekaAutoConfiguration
:Ribbon(负载均衡)基于eureka,这是后面将要讲的,这里不进行讨论
5.EurekaDiscoveryClientConfiguration
:Eureka自动发现与配置类
6.EurekaDiscoveryClientConfigServiceBootstrapConfiguration
:Eureka自动发现客户端配置中心引导类(就是配合SpringCloud Config进行配置文件读取)
二.**EurekaClientAutoConfiguration
启动开始**
1.先决条件
这里我们主要说一下Marker在哪里实例化。
这里会不会发现,跟Eureka服务端初始化是不是很雷同,都是要Marker
实例,但是Eureka客户端这边都不需要通过注解来引入,只要引入jar包就自动装配了。可以通过eureka.client.endabled=false
关闭
2. 读取配置eurekaInstanceConfiguration
3.实例化EurekaClient
1.在**EurekaClientAutoConfiguration
** 中有两处进行了EurekaClient
实例化,
第一处是在EurekaClientConfiguration
,
第二处是在**org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration.RefreshableEurekaClientConfiguration#eurekaClient
。**
都是通过new CloudEurekaClient进行对象实例化的,第二处是用来配合SpringCloud Config来动态刷新的。
2.开始实例化CloudEurekaClient
,调用了父类的构造器
3.在将Provider实现类作为参数传递进入同级构造方法中,提供备份注册信息获取方法
4.在同级构造方法中构造定时任务执行线程池
5.获取注册信息
这里会去获取注册信息,在下面第四点我会进行分析,其实内部实现已经在服务器端讲解过。
6.注册自己到服务端,会在下面第五点进行分析
7.开启定时任务
开启定时任务:刷新缓存,心跳信息,实例复制,状态变更监听
至此完成DiscoveryClient的初始化
4.从服务器获取已注册列表
传送门:SpringCloud-Eureka服务端集群如何同步(5)
5.注册自己到Eureka服务端
1.基于http请求去注册客户端到服务器中
2.底层使用的是jersey
客户端进行远程请求,至于jersey的底层我们将不再深入了
6.开启续约,缓存刷新,实例复制等定时任务,监听状态变化
1.缓存刷新
fetchRegistry
上面已经讲过,这里不再复述
2.心跳续约
3.构建状态监听器,并将自身状态更新到服务器上去
总结
在EurekaClient初始化过程中,eureka客户端所想做的事情,基本都已经做了。
1.从Eureka服务端获取注册列表
2.注册自己到Eureka服务端
3.开启注册列表刷新定时任务,定时拉取服务端注册表
4.续约定时任务开启
5.自身状态监听与定时同步到Eureka服务端
难的是开始,贵的是坚持,最后发现全是收获