Eureka源码解读
Posted robin008
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eureka源码解读相关的知识,希望对你有一定的参考价值。
Eureka是我接触分布式软件和服务的第一个框架,所以其原理和实现我的好好研究一下,Eureka可以参看这篇博文:http://springcloud.cn/view/29
初学者会在教程中看到使用@EnableEurekaClient,下面看看这个注解干了啥事。
@Order(2147483547) public class EnableDiscoveryClientImportSelector extends SpringFactoryImportSelector<EnableDiscoveryClient> { public EnableDiscoveryClientImportSelector() { } public String[] selectImports(AnnotationMetadata metadata) { String[] imports = super.selectImports(metadata); AnnotationAttributes attributes = AnnotationAttributes.fromMap(metadata.getAnnotationAttributes(this.getAnnotationClass().getName(), true));
// 这个代码确实很难看,它是自动配置了哪些类呢?
boolean autoRegister = attributes.getBoolean("autoRegister"); if (autoRegister) { List<String> importsList = new ArrayList(Arrays.asList(imports)); importsList.add("org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration"); imports = (String[])importsList.toArray(new String[0]); } else { Environment env = this.getEnvironment(); if (ConfigurableEnvironment.class.isInstance(env)) { ConfigurableEnvironment configEnv = (ConfigurableEnvironment)env; LinkedHashMap<String, Object> map = new LinkedHashMap(); map.put("spring.cloud.service-registry.auto-registration.enabled", false); MapPropertySource propertySource = new MapPropertySource("springCloudDiscoveryClient", map); configEnv.getPropertySources().addLast(propertySource); } } return imports; } protected boolean isEnabled() { return (Boolean)this.getEnvironment().getProperty("spring.cloud.discovery.enabled", Boolean.class, Boolean.TRUE); } protected boolean hasDefaultFactory() { return true; } }
以上是关于Eureka源码解读的主要内容,如果未能解决你的问题,请参考以下文章
《微服务专题》SpringCloud-Eureka源码分析解读
spring-eureka 源码解读----作为集群的eureka怎么样实现不做二次传播
spring-eureka 源码解读----为什么一个服务最多两分钟被其他服务感知
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段