Spring Cloud - Eureka Client源码分析
2017-11-20 20:08
761 查看
准备做个Spring Cloud源码分析系列, 作为Spring Cloud的源码分析笔记.
这一篇是Eureka的客户端.
两种方式, 最终的实现基本一样.
使用
实际上使用的是
使用
EnableDiscoveryClient
Enab
cc0f
leDiscoveryClientImportSelector
SpringFactoryImportSelector
这里只截取了部分变量和方法
spring.factories
在
同时
如EurekaClient. EurekaClient在构造时会启动一个HeartBeat线程, 线程在运行的时候会做renew的操作, 将Application的信息注册更新到Eureka的服务端.
EurekaDiscoveryClientConfiguration
如果你想学习Java工程化、高性能及分布式、高性能、深入浅出。性能调优、Spring,MyBatis,Netty源码分析和大数据等知识点可以来找我。
而现在我就有一个平台可以提供给你们学习,让你在实践中积累经验掌握原理。主要方向是JAVA架构师。如果你想拿高薪,想突破瓶颈,想跟别人竞争能取得优势的,想进BAT但是有担心面试不过的,可以加我的Java架构进阶群:554355695
这一篇是Eureka的客户端.
客户端
两种方式, 最终的实现基本一样.
显示指定服务发现的实现类型
使用@EnableEurekaClient注解显示的指定使用Eureka作为服务发现的实现, 并实例化
EurekaClient实例.
实际上使用的是
@EnableDiscoveryClient注解.
12345678 | @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@EnableDiscoveryClientpublic @interface EnableEurekaClient {} |
动态配置实现
使用@EnableDiscoveryClient注解来配置服务发现的实现.
源码分析
EnableDiscoveryClient12345678 | @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import(EnableDiscoveryClientImportSelector.class)public @interface EnableDiscoveryClient {} |
EnableDiscoveryClient注解的作用主要是用来引入
EnableDiscoveryClientImportSelector
Enab
cc0f
leDiscoveryClientImportSelector
12345678910111213141516 | @Order(Ordered.LOWEST_PRECEDENCE - 100)public class EnableDiscoveryClientImportSelector extends SpringFactoryImportSelector<EnableDiscoveryClient> { @Override protected boolean isEnabled() { return new RelaxedPropertyResolver(getEnvironment()).getProperty( "spring.cloud.discovery.enabled", Boolean.class, Boolean.TRUE); } @Override protected boolean hasDefaultFactory() { return true; }} |
EnableDiscoveryClientImportSelector继承了
SpringFactoryImportSelector并指定了泛型
EnableDiscoveryClient. 这里的泛型是重点.
SpringFactoryImportSelector
123456789101112131415 | public abstract class SpringFactoryImportSelector<T> implements DeferredImportSelector, BeanClassLoaderAware, EnvironmentAware { private ClassLoader beanClassLoader; private Class<T> annotationClass; protected SpringFactoryImportSelector() { this.annotationClass = (Class<T>) GenericTypeResolver .resolveTypeArgument(this.getClass(), SpringFactoryImportSelector.class); } public String[] selectImports(AnnotationMetadata metadata) { ... }} |
SpringFactoryImportSelector是spring cloud common包中的一个抽象类, 主要作用是检查泛型T是否有指定的factory实现, 即spring.factories中有对应类的配置.
spring.factories
在
spring-cloud-netflix-eureka-client.jar!/META-INF/spring.factories中
EnableDiscoveryClient的指定factory实现是
1234567891011 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.cloud.netflix.eureka.config.EurekaClientConfigServerAutoConfiguration,\org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceAutoConfiguration,\org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfigurationorg.springframework.cloud.bootstrap.BootstrapConfiguration=\org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceBootstrapConfigurationorg.springframework.cloud.client.discovery.EnableDiscoveryClient=\org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration |
EnableAutoConfiguration中包含了
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,
EurekaClientAutoConfiguration会为
EurekaDiscoveryClientConfiguration的实例依赖进行初始化,
如EurekaClient. EurekaClient在构造时会启动一个HeartBeat线程, 线程在运行的时候会做renew的操作, 将Application的信息注册更新到Eureka的服务端.
EurekaDiscoveryClientConfiguration
12345678 | @Configuration@EnableConfigurationProperties@ConditionalOnClass(EurekaClientConfig.class)@ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true)@CommonsLogpublic class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Ordered { ...} |
而现在我就有一个平台可以提供给你们学习,让你在实践中积累经验掌握原理。主要方向是JAVA架构师。如果你想拿高薪,想突破瓶颈,想跟别人竞争能取得优势的,想进BAT但是有担心面试不过的,可以加我的Java架构进阶群:554355695
相关文章推荐
- Spring Cloud Netflix Eureka client源码分析
- spring-cloud-eureka (二) Client - Server 接口交互(消息发送)源码分析
- Spring Cloud源码分析(一)Eureka
- Spring Cloud分布式微服务云架构源码分析 — Eureka
- spring-cloud-eureka (三) 注册中心源码分析
- SpringCloud系列:Eureka源码分析(二)
- Spring Cloud源码分析(一)Eureka
- solrj的CloudSolrClient源码分析及为什么查询慢
- Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
- spring cloud zuul网关服务重试请求配置和源码分析
- Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
- springcloud 入门 5 (feign源码分析)
- spring cloud 的启动Eureka client报错--Cannot execute request on any known server
- spring cloud集成 consul源码分析
- (三)Spring Cloud 小试牛刀 之 Eureka Client