前言
前面几篇博客大致介绍了Eureka的简单使用,现在我们有必要对Eureka的一部分原理进行探究。因此本篇博客将已启动注解@EnableEurekaServer
与@EnableEurekaClient
为入口,对Eureka服务端与客户端的启动过程进行观察。
@EnableEurekaServer
- 我们进入
@EnableEurekaServer
注解后可以看到该注解注入了一个类,名为EurekaServerMarkerConfiguration
;
- 进入
EurekaServerMarkerConfiguration
,里面有一个内部类并将其注入到了容器中;
- 通过学习springboot的自动装配原理可知在启动时springboot会自动加载spring.factories中的类,因此接下来我们查看spring-cloud-netflix-eureka-server包中的spring.factories,发现只有一个类。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration
- 我们打开类
EurekaServerAutoConfiguration
查看,发现该类的加载条件有一个就是容器中已经装配了第2步中提到的内部类Marker
;
- 当然,在类
EurekaServerAutoConfiguration
上还存在其他几个注解,大家感兴趣的可以自行查看。在该类中也完成了Eureka Server其他相关Bean的注入。
@EnableEurekaClient
@EnableEurekaClient
和 @EnableDiscoveryClient
的作用都是能够让注册中心发现、并扫描到该服务;但是@EnableEurekaClient
只对 Eureka 注册中心有效,而 @EnableDiscoveryClient
对 Eureka、Zookeeper、Consul 等注册中心都有效;从 SpringCloud Edgware 版本开始, @EnableEurekaClient
和@EnableDiscoveryClient
注解都可以省略了,只需要在 pom.xml 中引入依赖、在application.yml 上进行相关配置,就可以将微服务注册到注册中心上,不过为了起标识作用,最好还是加上 @EnableDiscoveryClient
注解。
- 所以
@EnableEurekaClient
与@EnableEurekaServer
有些区别,当我们进入@EnableEurekaClient
发现什么都没有;
- 查看spring-cloud-netflix-eureka-client包中的spring.factories,找到关于EurekaClient的自动配置类;
- 进入
EurekaClientAutoConfiguration
,关于EurekaClient相关的Bean都在这里完成了注入。
那么我们的服务是如何注册到EurekaServer的呢?
在EurekaClientAutoConfiguration
中有一个EurekaClient
的注入,在这里会将当前的Eureka客户端实例出来,然后注册并开起定时任务更新客户端的状态;
进入cloudEurekaClient.registerHealthCheck(healthCheckHandler)
方法,
继续跟踪:
最终找到了调用register()
方法的地方;
进入register()
方法,可以看到Eureka使用restful方式注册的客户端信息包括那些内容;
以上就是Eureka Client向Eureka Server注册的一个大致流程。