当前位置: 首页 > news >正文

Eureka 学习笔记4:EurekaClient

版本 awsVersion = ‘1.11.277’

EurekaClient 接口实现了 LookupService 接口,拥有唯一的实现类 DiscoveryClient 类。
LookupService


LookupService 接口提供以下功能:

  1. 获取注册表
  2. 根据应用名称获取应用
  3. 根据实例 id 获取实例信息
public interface LookupService<T> {/*** 根据应用名称从注册表中获取应用*/Application getApplication(String appName);/*** 获取注册表*/Applications getApplications();/*** 根据实例id获取实例信息集合,一个实例可能注册到多个应用*/List<InstanceInfo> getInstancesById(String id);/*** 通过轮询的方式,* 从注册表中获取参数virtualHostname对应服务的下一个实例信息* 默认情况下,* shouldFilterOnlyUpInstances配置为true* 即只返回InstanceStatus为UP的实例信息* 参数secure决定是从注册表(Applications)的* secureVirtualHostNameAppMap属性中获取实例信息* 还是从virtualHostNameAppMap属性中获取实例信息*/InstanceInfo getNextServerFromEureka(String virtualHostname, boolean secure);
}

EurekaClient 接口提供的功能包括三大类:

1、获取实例信息

  • 根据 region 获取注册表
  • 根据 serviceUrl 获取注册表(从服务端获取注册表)
  • 根据 vipAddress(虚拟主机名称)从本地注册表中获取服务实例信息集合

2、获取本地的元数据

  • 获取所有 region 名称
  • 获取自身的实例状态
  • 通过 DNS 或配置,获取 Availability Zone 中所有 Eureka Server 的地址(已弃用,使用 EndpointUtils 代替)
  • 注册 HealthCheckCallback 到自身(已弃用,使用 HealthCheckHandler 代替)
  • 注册 HealthCheckHandler 和 EurekaEventListener 到自身

3、其他方法

  • 获取自身的 EurekaClientConfig 和 ApplicationInfoManager
  • 调用 shutdown 方法并且取消注册自身实例
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首先会调用InstanceInfoReplicator的onDemandUpdate()方法,* onDemandUpdate()方法会异步调用InstanceInfoReplicator的run()方法,* run()方法会调用DiscoveryClient的refreshInstanceInfo()方法更新实例信息,* refreshInstanceInfo()方法会调用HealthCheckHandler的getStatus()方法更新实例状态* * DiscoveryClient也会根据appinfo.replicate.interval配置,默认30秒,* 周期性地调用InstanceInfoReplicator的run()方法更新实例信息和注册实例到服务端*/public void registerHealthCheck(HealthCheckHandler healthCheckHandler);public HealthCheckHandler getHealthCheckHandler();/*** EurekaEventListener的onEvent()方法被同步调用,* 因此必须保证onEvent()方法尽快返回并且不被阻塞* * DiscoveryClient每次从服务端成功拉取注册表后会发送CacheRefreshedEvent* * 当 1.自身的实例状态改变*    2.自身在服务端的实例状态改变时会发送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 构建的 InstanceInfo 中,appNamevipAddresssecureVipAddress 均是 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 亚马逊云服务)中的概念。

Region 表示不同地理区域,每个区域都与其他区域隔离,当查找资源时,只会看到与指定区域关联的资源。这是因为区域间彼此隔离,而且不会自动跨区域复制资源。

区域代码区域名称
us-east-1美国东部(弗吉尼亚北部)
us-east-2US East (Ohio)
us-west-1美国西部(加利福尼亚北部)
us-west-2美国西部(俄勒冈)

Spring Cloud 默认使用的 Region 是 us-east-1。

Availability Zone 表示每个区域内的多个相互隔离的位置,可用区的代码由其区域代码后跟一个字母标识符组成。例如,us-east-1a。

可以简单地将 Availability Zone 理解为同机房的 Eureka 集群,Region 理解为跨机房的 Eureka 集群。

AWS
同一 Region 使用多个 Availability Zone 做备份来实现容灾,服务实例分布在多个 Availability Zone,当其中某个实例发生故障,可以通过另一个 Availability Zone 中的实例代为处理请求。

参考文章 Region and Availability Zone
参考文章 Eureka 预备知识和核心类

http://www.lryc.cn/news/105831.html

相关文章:

  • 前端后端路径问题详解
  • @vue/composition-api原理解析
  • Kubernetes(K8s)从入门到精通系列之三:K8s的基本概念和术语之资源对象概述
  • cc2652在使用过程中的一些注意事项
  • YAPI接口自动鉴权功能部署详解
  • 【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板3
  • 搜索与图论(二)
  • 【SQL】-【计算两个varchar类型的timestamp的毫秒差】
  • Java 微信商家打款到零钱(旧版本接口)
  • Vue+Element ui Study
  • JAVA基础-多线程入门(详解)
  • Cirno‘s Perfect Equation Class 2023牛客暑期多校训练营5 D
  • pytorch学习——如何构建一个神经网络——以手写数字识别为例
  • PySpark 数据操作
  • FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示
  • 亚信科技AntDB数据库专家参加向量数据库首次技术标准研讨会
  • Windows中实现右键把电子书通过邮件发到kindle
  • Three.js之创建3D场景
  • 一个3年Android的找工作记录
  • CAS原理解析
  • SQL项目实战:银行客户分析
  • 【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—实战篇)
  • ubuntu
  • 【芯片设计- RTL 数字逻辑设计入门 3- Verdi 常用使用命令】
  • python-pytorch基础之cifar10数据集使用图片分类
  • 华纳云:linux下磁盘管理与挂载硬盘方法是什么
  • ChatGPT + Stable Diffusion + 百度AI + MoviePy 实现文字生成视频,小说转视频,自媒体神器!(一)
  • linux strcpy/strncpy/sprintf内存溢出问题
  • Jmeter如何添加插件
  • flask---CBV使用和源码分析