Eureka 学习笔记4:EurekaClient
版本 awsVersion = ‘1.11.277’
EurekaClient 接口实现了 LookupService 接口,拥有唯一的实现类 DiscoveryClient 类。

LookupService 接口提供以下功能:
- 获取注册表
- 根据应用名称获取应用
- 根据实例 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 中,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 亚马逊云服务)中的概念。
Region 表示不同地理区域,每个区域都与其他区域隔离,当查找资源时,只会看到与指定区域关联的资源。这是因为区域间彼此隔离,而且不会自动跨区域复制资源。
| 区域代码 | 区域名称 |
|---|---|
| us-east-1 | 美国东部(弗吉尼亚北部) |
| us-east-2 | US East (Ohio) |
| us-west-1 | 美国西部(加利福尼亚北部) |
| us-west-2 | 美国西部(俄勒冈) |
Spring Cloud 默认使用的 Region 是 us-east-1。
Availability Zone 表示每个区域内的多个相互隔离的位置,可用区的代码由其区域代码后跟一个字母标识符组成。例如,us-east-1a。
可以简单地将 Availability Zone 理解为同机房的 Eureka 集群,Region 理解为跨机房的 Eureka 集群。

同一 Region 使用多个 Availability Zone 做备份来实现容灾,服务实例分布在多个 Availability Zone,当其中某个实例发生故障,可以通过另一个 Availability Zone 中的实例代为处理请求。
参考文章 Region and Availability Zone
参考文章 Eureka 预备知识和核心类
相关文章:
Eureka 学习笔记4:EurekaClient
版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口,拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能: 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…...
前端后端路径问题详解
加了项目名,访问所有页面都是 在 项目名下 出来的路径 不加项目名,访问所有页面都不用加项目名,然后前后端的加/的效果都一样,都是在根目录下没有项目名的路径!!! 后端 一、MVC 1.不管是转发…...
@vue/composition-api原理解析
前言 上一篇文章介绍了vue/composition-api是什么,以及为什么要用,现在来系统地解析一下 vue/composition-api 的实现原理,希望可以加深对其工作机制的理解。 老规矩先分享下AI评价:对vue/composition-api实现原理的介绍整体上非…...
Kubernetes(K8s)从入门到精通系列之三:K8s的基本概念和术语之资源对象概述
Kubernetes K8s从入门到精通系列之三:K8s的基本概念和术语之资源对象概述 K8s中的基本概念和术语大多是围绕资源对象(Resource Object)来说的,而资源对象在总体上可分为以下两类: 某种资源的对象,例如节点(Node)、Pod、服务(Serv…...
cc2652在使用过程中的一些注意事项
可能不只是cc2652有这些坑,估计cc26xx系列都存在。 CCS的预编译宏配置位置 时钟获取 时钟获取__STATIC_INLINE uint32_t SysCtrlClockGet( void )在sys_ctrl.h中,sys_ctrl.h没有在工程路径下面,在其sdk中 节拍时间获取 ICall_getTicks(); …...
YAPI接口自动鉴权功能部署详解
目录 安装准备 在线安装 离线安装 配置使用 安装准备 以下操作,默认要求自己部署过yapi,最好是部署过yapi二次开发环境。 无论是选择在线安装或者是本地安装,都需要安装client工具。 1、yapi-cli:npm install yapi-cli –g…...
【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板3
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…...
搜索与图论(二)
最短路 单源最短路 所有边权都是正数 朴素Dijkstra算法 基本思路:从1号点到其他点的最短距离 步骤: 定义一个s集合包含当前已确定最短距离的点 1、初始化距离dis[1] 0,dis[其它] 正无穷 2、for i 0-n循环n次 2.1找到不在s中的距离最近的点 ->t 2.2把t加到s当中去…...
【SQL】-【计算两个varchar类型的timestamp的毫秒差】
背景 TRANSTAMP3、TRANSTAMP2在Oracle数据库中的类型为varchar,但实际保存的值是时间戳timestamp类型,现在要计算二者的毫秒差 Oracle或MySQL extract(second from (to_timestamp(TRANSTAMP3,yyyy-mm-dd hh24:mi:ss.ff) - to_timestamp(TRANSTAMP2,yyy…...
Java 微信商家打款到零钱(旧版本接口)
旧版微信支付接口要求请求时携带证书请求 构建请求参数 /*** 付款到零钱** param withdrawalDto dto撤军* return {link Map }<{link String }, {link Object }>* throws Exception 异常* Author chen 2023-07-27 15:04*/private Map<String, Object> payToUser(Wi…...
Vue+Element ui Study
目录 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 2、this.$refs使用方法 Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘xxx‘)“ 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 :show-overflow-toolti…...
JAVA基础-多线程入门(详解)
目录 引言 一,线程概念 二,创建线程 2.1,继承Thread类,重写run方法 2.2,实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函 数的target 2.3,通…...
Cirno‘s Perfect Equation Class 2023牛客暑期多校训练营5 D
登录—专业IT笔试面试备考平台_牛客网 题目大意:有q次询问,每次给出三个整数k,c,n,求有多少满足条件的数对(a,b)满足kabc且c是b的倍数,且gcd(a,b)>n 1<q<100;…...
pytorch学习——如何构建一个神经网络——以手写数字识别为例
目录 一.概念介绍 1.1神经网络核心组件 1.2神经网络结构示意图 1.3使用pytorch构建神经网络的主要工具 二、实现手写数字识别 2.1环境 2.2主要步骤 2.3神经网络结构 2.4准备数据 2.4.1导入模块 2.4.2定义一些超参数 2.4.3下载数据并对数据进行预处理 2.4.4可视化数…...
PySpark 数据操作
数据输入 RDD对象 如图可见,PySpark支持多种数据的输入,在输入完成后,都会得到一个:RDD类的对象 RDD全称为:弹性分布式数据集(Resilient Distributed Datasets) PySpark针对数据的处理&…...
FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示
1.场景 基于特权A7系列开发板,采用OV5640摄像头实时采集图像数据,并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中,用到的软件版本,如下表所示,基本的硬件情况如下。该项目对应FPGA工程源码…...
亚信科技AntDB数据库专家参加向量数据库首次技术标准研讨会
2023年7月19日下午,中国通信标准化协会大数据技术标准推进委员会数据库与存储工作组(CCSA TC601 WG4)联合中国信通院数据库应用创新实验室(CAICT DBL)在线上召开《向量数据库技术要求》标准首次研讨会。本次会议由中国…...
Windows中实现右键把电子书通过邮件发到kindle
不使用第三方软件,通过Windows自带的函数,可以实现右键将电子书通过电子邮件发送到kindle邮箱,从而实现kindle电子书传送功能。实现过程如下: 1. 使用bat添加右键功能 打开资源管理器,在地址中输入%APPDATA%\Microso…...
Three.js之创建3D场景
参考资料 【G】Three.js官方文档:https://threejs.org/docs/ Three.js是一个流行的WebGL库,官方文档提供了详细的API参考和示例,适合学习和参考。【G】Three.js GitHub链接:https://github.com/mrdoob/three.js 这是一个流行的基…...
一个3年Android的找工作记录
作者:Petterp 这是我最近 1个月 的找工作记录,希望这些经历对你会有所帮助。 有时机会就像一阵风,如果没有握住,那下一阵风什么时候吹来,往往是个运气问题。 写在开始 先说背景: 自考本,3年经验࿰…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
