- SpringCloud 版本 :Hoxton.SR1
- SpringBoot 版本:2.2.1.RELEASE
- 关键字 :@EnableEurekaServer,@EnableEurekaClient,底层实现
- 首先SpringCloud承载于SpringBoot之上,而SpringBoot又依赖Spring相关组件,那么我们分析这些注解时势必要联想到SpringBoot和Spring之上。
1. @EnableEurekaServer
- 我们点开注解会发现 :
SpringBoot启动 源码深度解析(一)
SpringBoot启动 源码深度解析(二)
SpringBoot启动 源码深度解析(三)
SpringBoot启动 源码深度解析(四)
顺着解析@Import注解的思路接着往下看,我们发现导入的类是 EurekaServerMarkerConfiguration.class,点进去发现:
- 若你的英文阅读能力良好,那么我建议从注释入手,一些比较标准的框架,一般注释都会很清晰,也可以很直观的看出来当前类的功能
- 可以 将鼠标放在类上,输入 CTRL + 鼠标左键,查看有哪些类引用了当前类
- 一般上面两种方式可以定位到当前类的作用了,我们尝试使用第一种方式查看究竟。注释中提到了 EurekaServerAutoConfiguration类,从字面意思可以看出来当前类是个自动装配类,我们找到这个类如下:
- 此时我们就很清晰了, EurekaServerMarkerConfiguration.Marker内部类是 EurekaServerAutoConfiguration实现自动装配的必要条件,而@EnableEurekaServer中又被@Import修饰,所以标注上@EnableEurekaServer之后会触发一系列的自动装配功能,当然此注解也可以替换为任意带有@Import(EurekaServerMarkerConfiguration.class)的自定义注解。
- 此处的@EnableEurekaServer就类似个发动机,正如 Enable名字一样,而且形如其他带有@EnableXXX的注解也都是相同的套路。
2. @EnableEurekaClient
-
查看注解源码发现:
此时我们会发现,这个@EnableEurekaClient的套路咋跟@EnableEurekaServer的套路咋不一样了,世界观突然颠覆了...
- 那我们暂时先不管套路的问题,此时发现注释里面也没有提到相关的类,只是说加上此注解之后会实现客户端的自动发现。那我们就使用另外一种方法查询哪些类包含这个注解:
于是查阅 spring-cloud-netflix-eureka-client-1.3.x GitHub地址 发现 1.3的 @EnableEurekaClient: - @EnableEurekaClient :根据官方说明是,只要classpath下包含spring-cloud-netflix-eureka-client的相关class,即可实现Eureka的自动装配。另外根据作者亲测,应用只要包含spring-cloud-netflix-eureka-client的相关class,即使不使用@EnableEurekaClient注解也可以实现客户端的注册,带上注解之后会显得更清晰,说明这是一个客户端。
- @EnableDiscoveryClient:此注解的作用更强大的地方在于,客户端自动发现,包括但不限于 Eureka注册中心,还可以发现zookeeper、console、nacos等注册中心。
结语:相信此时我们对Eureka的服务端与客户端的Enable注解驱动已经有所了解了。本篇更偏重的是服务注册与发现的原理分析,下一篇我们将继续探究Eureka服务端与Eureka客户端的具体实现细节,精确分析到每个重要的关键类甚至关键方法。
- ☛ 文章要是勘误或者知识点说的不正确,欢迎评论,毕竟这也是作者通过阅读源码获得的知识,难免会有疏忽!
- ☛ 要是感觉文章对你有所帮助,不妨点个关注,或者移驾看一下作者的其他文集,也都是干活多多哦,文章也在全力更新中。
- ☛ 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处!