一、EurekaServer的启动流程
查看eureka的启动starter依赖,eureka根据springboot自动装配的特点,会自动装配spring.factores中的类。查看spring-cloud-netflix-eureka-server中的spring.factores文件。文件内容为#org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration,自动装配了EurekaServerAutoConfiguration类,进入该类。
通过import引入了EurekaServerInitializerConfiguration类,@ConditionalOnBean中有一个marker类,当容器加载了这个类之后才会装配EurekaServerAutoConfiguration。先查看一下这个Marker类。
Marker是EurekaServerMarkerConfiguration装配的
而EurekaServerMarkerConfiguration又是通过EnableEurekaServer注解导入的,所以只有项目添加了@EnableEurekaServer注解之后才会装配EurekaServerAutoConfiguration。接下来查看该类中的一些装配详情。
1、eureka仪表盘
当配置eureka.dashboard.enabled=true的时候可以访问eureka的管理界面
2、对等感知实例注册器
在集群模式下,由于eureka是没有主从之分的,都是单独的对等存在所以需要相互注册。PeerEurekaNodes是辅助封装对等节点相关的信息和操作,比如更新集群中的对等。进入PeerEurekaNodes查看相关操作。
启动了一个定时任务,定时更新对等信息。但是这个任务并不是在这里启动。
3、 加载eureka的容器上下文。 点击进入容器类
这里启动了刚才上面的更新注册信息的定时任务。registry.init方法中启动了定时任务,定时更新续约次数的期望值和自我保护的临界值。
4、注入Jersy过滤器,Jersy是一个rest框架帮我们发布restful服务接口的,类似于(Spring mvc)框架的中的续约等接口都是这么暴露的。查看定义
扫描这两个包下面定义的接口信息。
5、@import标签引入了EurekaServerInitializerConfiguration。进入该类,类继承了SmartLifecycle接口,则会自动运行start方法,来看一下start方法中的具体操作。
执行了eurekaServerBootstrap的容器初始化方法,并且发布了两个事件。 进入contextInitialized方法
registry.syncUp方法是同步其它EurekaServer的注册信息 ,进入方法查看详情
第一处是获取其它Eureka注册的服务信息,第二处则将这些信息注册到自己的注册表中。
再来看一下EurekaBootstrap的contextInitialize方法中的openForTraffic方法。
二、EurekaClient的启动过程
跟server服务一样,我们先看spring.factories文件里面的自动装配的类。
关注注解@AutoConfigureAfter中的元素,当加载完EurekaDiscoveryClientConfiguration等类之后才会装配EurekaClientAutoConfiguration,进入该类
只要是配置了eureka.client.enabled=true则会装配该bean,并且该bean中配置了Marker, EurekaClientAutoConfiguration正好需要有这个bean才会创建,所以只要引入了eurekaClient的依赖,并且eureka.client.enabled=true,则该服务会自动成为一个eureka的客户端。
1、加载EurekaClient的配置信息
2、加载客户端对象
进入客户端对象创建的细节,根据代码一直进入。
最终可以看到方法中调用了这些核心方法,依次是获取服务注册表信息,注册自己服务,启动一些定时任务,现在来看一下都启动了哪些定时任务。进入之后可以看到启动了定时拉取服务列表信息,定时续约 。
3、com.netflix.discovery.DiscoveryClient#shutdown
在服务下线是调用unregister下线服务