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.mzph.cn/news/17788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab配置webhook

一.前言 当需要做jenkins的自动化触发构建时&#xff0c;就需要配置gitlab的webhook功能&#xff0c;以下来展示以下如何配置gitlab的webhook&#xff0c;jenkins的配置就不在这里展示了&#xff0c;可以去看我devops文章的完整配置 二.配置 在新版本的gitlab中&#xff0c…

《TCP IP网络编程》第十四章

第 14 章 多播与广播 14.1 多播 多播&#xff08;Multicast&#xff09;方式的数据传输是基于 UDP 完成的。因此 &#xff0c;与 UDP 服务器端/客户端的实现方式非常接近。区别在于&#xff0c;UDP 数据传输以单一目标进行&#xff0c;而多播数据同时传递到加入&#xff08;注…

微服务体系<2> ribbon

1. 什么是负载均衡 比如说像这样 一个请求打在了nginx上 基于nginx进行负载分流 这就是负载均衡但是负载均衡分 服务端负载均衡和客户端负载均衡 客户端负载均衡 我user 从注册中心拉取服务 拉取order列表&#xff0c;然后发起getOne()调用 这就是客户端负载均衡 特点就是我…

小程序如何将商品添加到分类

​将商品添加到分类是非常重要的功能&#xff0c;可以让商家更方便地管理分类和商品。下面将具体介绍如何将产品添加到分类中。 步骤一&#xff1a;选中商品 在个人中心点击管理入口&#xff0c;然后找到“商品管理”菜单并点击。找到需要添加的商品&#xff0c;然后选中它。…

Codeforces Round 889 (Div. 2)(视频讲解A——D)

文章目录 A Dalton the TeacherB Longest Divisors IntervalC2 Dual (hard Version)D Earn or Unlock Codeforces Round 889 (Div. 2)&#xff08;视频讲解A——D&#xff09; A Dalton the Teacher #include<bits/stdc.h> #define endl \n #define INF 0x3f3f3f3f us…

【Golang 接口自动化05】使用yml管理自动化用例

目录 YAML 基本语法 对象&#xff1a;键值对的集合(key:value) 数组&#xff1a;一组按顺序排列的值 字面量&#xff1a;单个的、不可再分的值&#xff08;数字、字符串、布尔值&#xff09; yml 格式的测试用例 定义yml文件 创建结构体 读取yml文件中的用例数据 调试…

基于 moleculer 微服务架构的智能低代码PaaS 平台源码 可视化开发

低代码开发平台源码 低代码管理系统PaaS 平台 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景&#xff0c;包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业&#xff0c;都可以使用管理后台…

Git下:Git命令使用-详细解读

今天给大家讲一讲 Git常用命令的使用说明&#xff0c;希望本篇文章对大家有所帮助。 一、Git 安装 Git 的详细安装教程&#xff1a;见上一篇文章《Git上&#xff1a;Git安装教程》&#xff1a; Git上&#xff1a;全网最全最详细的Git安装教程&#xff0c;建议收藏保存 二、…

windows11编译VideoProcessingFramework库

1、下载VideoProcessingFramework Release v2.0.0 NVIDIA/VideoProcessingFramework GitHub 2、下载FFMPEG Releases BtbN/FFmpeg-Builds GitHub 推荐 ffmpeg-n4.4-latest-win64-lgpl-shared-4.4 3、下载CMAKE Download | CMake 4、下载visual studio 2019 Visual …

98. Python基础教程:try...except...finally语句

【目录】 文章目录 1. try...except...finally语法介绍2. try...except...finally执行顺序3. 捕获特定类型的异常4. 捕获所有类型的异常5. 实操练习-打开txt文件并输出文件内容 【正文】 在今天的课程中&#xff0c;我们将学习Python中的异常处理语句try...except...finally。 …

如何使用fiddler进行抓包

首先需要下载fiddler&#xff0c;推荐使用bing搜索引擎搜索&#xff08;百度搜狗一般搜这种工具展示的前几个全都是广告&#xff09;&#xff0c;直接搜索fiddler&#xff0c;搜出来第一个fiddler官网 然后直接点击download下载 进入下载页面后&#xff0c;正确填写一个邮箱&a…

linux 动态库so相关操作

1. 查看库版本号 一般在文件名上有版本号&#xff0c;若文件名上没有版本号&#xff0c;使用如下命令查看&#xff1a; readelf -d libstdc.so 2. 查看库内函数 a) nm -d libstdc.so | grep 内容 b) objdump -tT libstdc.so | grep 内容 c) readelf -s libstdc.so | grep…

通用版Bubble_sort

❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其它语言打好基础&#xff0c;C生万物&#xff01; 开始我们的C语言之旅吧&#xff01;✈ 目录 前言&#xff1a; 一.分析Bubble_sort 二.解决措施 三.模拟实现 前言&#xff…

【数据结构】带头+双向+循环链表(DList)(增、删、查、改)详解

一、带头双向循环链表的定义和结构 1、定义 带头双向循环链表&#xff0c;有一个数据域和两个指针域。一个是前驱指针&#xff0c;指向其前一个节点&#xff1b;一个是后继指针&#xff0c;指向其后一个节点。 // 定义双向链表的节点 typedef struct ListNode {LTDataType dat…

java判断字符串是否和空字符串(““)相等、是否和空引用(null)相等,比较顺序不同导致出现死代码(Dead code)

我在用Java实现需求的时候&#xff0c;用到了字符串跟空字符串&#xff08;“”&#xff09;比较&#xff0c;跟空引用null比较&#xff0c;两个比较语句的顺序不同&#xff0c;一个顺序出现了死代码&#xff08;Dead code&#xff09;。 下面这个代码片段&#xff0c;字符串li…

探秘二叉树后序遍历:从叶子到根的深度之旅

本篇博客会讲解力扣“145. 二叉树的后序遍历”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a; 先创建一个数组&#xff0c;用来存储二叉树后序遍历的结果。数组的大小跟树的结点个数有关。树的结点个数可以使用递归实现&#xff0c;即总个数左子树结点个数右…

图像 检测 - FCOS: Fully Convolutional One-Stage Object Detection (ICCV 2019)

FCOS: Fully Convolutional One-Stage Object Detection - 全卷积一阶段目标检测&#xff08;ICCV 2019&#xff09; 摘要1. 引言2. 相关工作3. 我们的方法3.1 全卷积一阶目标检测器3.2 FCOS的FPN多级预测3.3 FCOS中心度 4. 实验4.1 消融研究4.1.1 FPN多级预测4.1.2 有无中心度…

Gis入门,根据起止点和一个控制点计算二阶贝塞尔曲线(共三个控制点组成的线段转曲线)

前言 本章讲解如何在gis地图中使用起止点和一个控制点(总共三个控制点)生成二阶贝塞尔曲线。 三阶贝塞尔曲线请参考下一章《Gis入门,使用起止点和两个控制点生成三阶贝塞尔曲线(共四个控制点)》 贝塞尔曲线(Bezier curve)介绍 贝塞尔曲线(Bezier curve)是一种数学…

Nim游戏博弈论

【模板】nim 游戏 题目描述 https://www.luogu.com.cn/problem/P2197 甲&#xff0c;乙两个人玩 nim 取石子游戏。 nim 游戏的规则是这样的&#xff1a;地上有 n n n 堆石子&#xff08;每堆石子数量小于 1 0 4 10^4 104&#xff09;&#xff0c;每人每次可从任意一堆石子…

ISO 7637-2 5a/5b抛负载测试保护用TVS二极管,如何选型号?

在国际标准ISO 16750-2颁布之前&#xff0c;全球各大汽车零部件制造商一直采用的是ISO 7637-2标准。ISO 16750-2国际标准发行之后&#xff0c;汽车抛负载浪涌测试中ISO 7637-2 5A和5B测试标准被ISO 16750-2测试标准取代。查看ISO 16750-2和ISO 7637-2国际标准文档资料对比会发现…