文章目录
本文讲解
springCloud
怎么整合并自动装配eureka
并启动eureka-server
。
一、装配流程解析
1.1@EnableEurekaServer注解解析
1.1.1配置流程
在引入
eureka
的依赖之后,配置eureka server
的时候需要我们在springBoot
的启动类上面加个@EnbaleEurekaServer
的注解标识启动一个eureka server
。
1.1.2 注解剖析@EnableEurekaServer
这里使用了
Import
导入了一个配置类EurekaServerMarkerConfiguration
1.1.3 EurekaServerMarkerConfiguration
这里往
spring
容器中添加了一个bean
,类名叫做Marker
,好像只是做个开启的标记,自动装配的逻辑不在这里,我们看下spring.factories
看相关的自动装配的逻辑
1.1.4 spring.factories配置解析
这里可以发现
eureka-server
的jar
中在spring.factories
文件中自动装配了一个类EurekaServerAutoConfiguration
1.1.5 EurekaServerAutoConfiguration解析
1.1.5.1 EurekaServerAutoConfiguration类声明解析
这里重点关注两个配置,一个是
ConditionalOnBean
,判断如果容器中存在Marker
这个bean
才进行自动装配,因为之前我们已经在@EnableEurekaServer
中注入了,所以这个是没问题,第二个是使用Import
导入了一个EurekaServerInitializerConfiguration
来进行初始化流程,还有就是加载和装配配置类
1.1.5.2 EurekaServerAutoConfiguration类属性解析
这里注入了了一些
bean
,其中还包括eurekaClient
和ClientConfig
,这个是因为eurekaServer
依赖于eurekaClient
来和集群其他节点进行通信。
1.1.5.3 EurekaServerAutoConfiguration类装配bean
这里会装配
dashboard
的controller
,然后对注解表进行创建,然后初始化集群节点信息类对象,再初始化EurekaServerContext
也就是eurekaserver
的上下文,然后装配bootstrap
类用来做项目启动和停止的,最后就是初始化jersey
框架的bean
,对外暴露restful
接口。
1.1.6 EurekaServerInitializerConfiguration类解析
这个类是在自动装配的时候导入的,是用于做
eurekaServer
的初始化逻辑的,这里实现了SmartLifecycle,spring会在初始化完成后,回调Lifecycle的start方法
- 这里
start
方法中分首先会开启一个线程,执行eurekaServerBootstrap#contextInitialized
方法,然后发布EurekaRegistryAvailableEvent
事件,设置running
为true
,再发布EurekaServerStartedEven
t事件
1.1.7 EurekaServerBootstrap#contextInitialized
首先初始化
eureka environment
,然后初始化context
,最后将context
设置到ServletContext
中
1.1.7.1 EurekaServerBootstrap#initEurekaEnvironment
其实就是从配置文件中获取当前的
eureka environment
1
1.1.7.2 EurekaServerBootstrap#initEurekaEnvironment
这里重点就是他会去集群中的其他节点拉取注册表信息。
1.1.7 EurekaServerContext
在讲解
EurekaServerAutoConfiguration
自动装配的时候会自动注入bean
->EurekaServerContext
,配置eureka
的上下文,构造的时候会传入PeerEurekaNodes
与PeerAwareInstanceRegistry
注册表信息,我们在这个类中发现他会去初始化和小会这两个组件。在initialize
会启动peerEurekaNodes
和初始化注册表
1.1.7.1 PeerEurekaNodes#start
- 首先调用
updatePeerEurekaNodes
更新集群节点信息,就是创建节点对象- 创建一个定时任务定时更新节点信息
1.1.7.2 PeerAwareInstanceRegistryImpl#init
这里初始化了一些很重要的组件,后续我们会讲解,其中包括服务续约,自我保护,
cache
,初始化注册表等关键信息