網(wǎng)站備案要求北京seo薪資
版本 awsVersion = ‘1.11.277’
EurekaClient 接口實(shí)現(xiàn)了 LookupService 接口,擁有唯一的實(shí)現(xiàn)類 DiscoveryClient 類。
LookupService 接口提供以下功能:
- 獲取注冊表
- 根據(jù)應(yīng)用名稱獲取應(yīng)用
- 根據(jù)實(shí)例 id 獲取實(shí)例信息
public interface LookupService<T> {/*** 根據(jù)應(yīng)用名稱從注冊表中獲取應(yīng)用*/Application getApplication(String appName);/*** 獲取注冊表*/Applications getApplications();/*** 根據(jù)實(shí)例id獲取實(shí)例信息集合,一個(gè)實(shí)例可能注冊到多個(gè)應(yīng)用*/List<InstanceInfo> getInstancesById(String id);/*** 通過輪詢的方式,* 從注冊表中獲取參數(shù)virtualHostname對應(yīng)服務(wù)的下一個(gè)實(shí)例信息* 默認(rèn)情況下,* shouldFilterOnlyUpInstances配置為true* 即只返回InstanceStatus為UP的實(shí)例信息* 參數(shù)secure決定是從注冊表(Applications)的* secureVirtualHostNameAppMap屬性中獲取實(shí)例信息* 還是從virtualHostNameAppMap屬性中獲取實(shí)例信息*/InstanceInfo getNextServerFromEureka(String virtualHostname, boolean secure);
}
EurekaClient 接口提供的功能包括三大類:
1、獲取實(shí)例信息
- 根據(jù) region 獲取注冊表
- 根據(jù) serviceUrl 獲取注冊表(從服務(wù)端獲取注冊表)
- 根據(jù) vipAddress(虛擬主機(jī)名稱)從本地注冊表中獲取服務(wù)實(shí)例信息集合
2、獲取本地的元數(shù)據(jù)
- 獲取所有 region 名稱
- 獲取自身的實(shí)例狀態(tài)
- 通過 DNS 或配置,獲取 Availability Zone 中所有 Eureka Server 的地址(已棄用,使用 EndpointUtils 代替)
- 注冊 HealthCheckCallback 到自身(已棄用,使用 HealthCheckHandler 代替)
- 注冊 HealthCheckHandler 和 EurekaEventListener 到自身
3、其他方法
- 獲取自身的 EurekaClientConfig 和 ApplicationInfoManager
- 調(diào)用 shutdown 方法并且取消注冊自身實(shí)例
public interface EurekaClient extends LookupService {// ========================// getters for InstanceInfo// ========================public Applications getApplicationsForARegion(@Nullable String region);public Applications getApplications(String serviceUrl);public List<InstanceInfo> getInstancesByVipAddress(String vipAddress, boolean secure);public List<InstanceInfo> getInstancesByVipAddress(String vipAddress, boolean secure, @Nullable String region);public List<InstanceInfo> getInstancesByVipAddressAndAppName(String vipAddress, String appName, boolean secure);// ==========================// getters for local metadata// ==========================public Set<String> getAllKnownRegions();public InstanceInfo.InstanceStatus getInstanceRemoteStatus();/*** @deprecated see {@link com.netflix.discovery.endpoint.EndpointUtils} for replacement*/@Deprecatedpublic List<String> getDiscoveryServiceUrls(String zone);@Deprecatedpublic List<String> getServiceUrlsFromConfig(String instanceZone, boolean preferSameZone);@Deprecatedpublic List<String> getServiceUrlsFromDNS(String instanceZone, boolean preferSameZone);// ===========================// healthcheck related methods// ===========================/*** @deprecated Use {@link #registerHealthCheck(com.netflix.appinfo.HealthCheckHandler)} instead.*/@Deprecatedpublic void registerHealthCheckCallback(HealthCheckCallback callback);/*** 注冊HealthCheckHandler后, * DiscoveryClient首先會(huì)調(diào)用InstanceInfoReplicator的onDemandUpdate()方法,* onDemandUpdate()方法會(huì)異步調(diào)用InstanceInfoReplicator的run()方法,* run()方法會(huì)調(diào)用DiscoveryClient的refreshInstanceInfo()方法更新實(shí)例信息,* refreshInstanceInfo()方法會(huì)調(diào)用HealthCheckHandler的getStatus()方法更新實(shí)例狀態(tài)* * DiscoveryClient也會(huì)根據(jù)appinfo.replicate.interval配置,默認(rèn)30秒,* 周期性地調(diào)用InstanceInfoReplicator的run()方法更新實(shí)例信息和注冊實(shí)例到服務(wù)端*/public void registerHealthCheck(HealthCheckHandler healthCheckHandler);public HealthCheckHandler getHealthCheckHandler();/*** EurekaEventListener的onEvent()方法被同步調(diào)用,* 因此必須保證onEvent()方法盡快返回并且不被阻塞* * DiscoveryClient每次從服務(wù)端成功拉取注冊表后會(huì)發(fā)送CacheRefreshedEvent* * 當(dāng) 1.自身的實(shí)例狀態(tài)改變* 2.自身在服務(wù)端的實(shí)例狀態(tài)改變時(shí)會(huì)發(fā)送StatusChangeEvent*/public void registerEventListener(EurekaEventListener eventListener);public boolean unregisterEventListener(EurekaEventListener eventListener);// =============// other methods// =============public void shutdown();public EurekaClientConfig getEurekaClientConfig();public ApplicationInfoManager getApplicationInfoManager();
}
注1:在使用 org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean
構(gòu)建的 InstanceInfo 中,appName
、vipAddress
、secureVipAddress
均是 spring.application.name
配置指定的值。
@Override
public void setEnvironment(Environment environment) {this.environment = environment;RelaxedPropertyResolver springPropertyResolver = new RelaxedPropertyResolver(this.environment, "spring.application.");String springAppName = springPropertyResolver.getProperty("name");if(StringUtils.hasText(springAppName)) {setAppname(springAppName);setVirtualHostName(springAppName);setSecureVirtualHostName(springAppName);}
}
注2:Region 和 Availability Zone 是 AWS(Amazon Web Services 亞馬遜云服務(wù))中的概念。
Region 表示不同地理區(qū)域,每個(gè)區(qū)域都與其他區(qū)域隔離,當(dāng)查找資源時(shí),只會(huì)看到與指定區(qū)域關(guān)聯(lián)的資源。這是因?yàn)閰^(qū)域間彼此隔離,而且不會(huì)自動(dòng)跨區(qū)域復(fù)制資源。
區(qū)域代碼 | 區(qū)域名稱 |
---|---|
us-east-1 | 美國東部(弗吉尼亞北部) |
us-east-2 | US East (Ohio) |
us-west-1 | 美國西部(加利福尼亞北部) |
us-west-2 | 美國西部(俄勒岡) |
Spring Cloud 默認(rèn)使用的 Region 是 us-east-1。
Availability Zone 表示每個(gè)區(qū)域內(nèi)的多個(gè)相互隔離的位置,可用區(qū)的代碼由其區(qū)域代碼后跟一個(gè)字母標(biāo)識符組成。例如,us-east-1a。
可以簡單地將 Availability Zone
理解為同機(jī)房
的 Eureka 集群,Region
理解為跨機(jī)房
的 Eureka 集群。
同一 Region 使用多個(gè) Availability Zone 做備份來實(shí)現(xiàn)容災(zāi),服務(wù)實(shí)例分布在多個(gè) Availability Zone,當(dāng)其中某個(gè)實(shí)例發(fā)生故障,可以通過另一個(gè) Availability Zone 中的實(shí)例代為處理請求。
參考文章 Region and Availability Zone
參考文章 Eureka 預(yù)備知識和核心類