eureka服务端源码分析
首先eureka server的主启动类会有一个@EnableEurekaServer注解 ,该注解点进去会有一个通过Import注解导入的配置类EurekaServerMarkerConfiguration,通过类注释可以看出该注解的作用是激活eureka server 相关配置[EurekaServerAutoConfiguration]
该配置类点击进去会发现往spring容器当中注入了一个 Marker的bean
通过注释可以看出它激活了EurekaServerAutoConfiguration,了解过springboot的都知道,它会在容器启动的时候把一些XXXAutoConfiguration加到容器当中。但是不一定启用
查看EurekaServerAutoConfiguration类,发现该类启用的条件是容器当中加了Marker 的bean该类才会生效。
正是这个Marker的bean激活了EurekaServer的配置类
通过查看,在EurekaServerAutoConfiguration类中发现EurekaServerConfig bean初始化了eurekaServer的相关默认配置
在EurekaServerAutoConfiguration类中发现eurekaController bean初始化了一些接口用于获取eurekaServer的信息
在EurekaServerAutoConfiguration类中发现peerAwareInstanceRegistry初始化了集群注册表
在EurekaServerAutoConfiguration类中发现peerEurekaNodes初始化了集群节点集合
基于eureka server配置,注册表,集群节点集合,以及服务实例初始化eurekaServer上下文
初始化springcloud包装的eureka原生启动类
初始化Jersey 过滤器
到此,EurekaServerAutoConfiguration类初始化工作结束
在eureka自动配置类上方通过 import 导入了一个EurekaServerInitializerConfiguration配置类
该类实现了SmartLifecycle接口,实现了SmartLifecycle接口的类会在初始完成后根据isAutoStartup()的返回值确认是否调用start()方法
通过查看start()方法,发现这里初始化了 eureka server [ log ]
跟到contextInitialized方法,发现在这里初始化了eureka的运行环境和eurekaServer的上下文
跟到initEurekaServerContext方法,registry.syncUp,从相邻的eureka节点复制注册表,调用相邻节点的http接口获取所有服务实例 服务同步
把所有实例注册到本地
修改eureka状态为UP ,开启一个定时任务,清理60s没有续约的任务 服务剔除
开启定时剔除服务的任务 delay:60s 服务启动后60s执行,执行周期:60s