5.Eureka服务注册的源码分析(springcloud)

news/2024/5/19 6:40:53/文章来源:https://blog.csdn.net/weixin_59334478/article/details/126960444
一、Eureka 概念的理解
1 服务的注册
当项目启动时(eureka 的客户端),就会向 eureka-server 发送自己的元数据(原始数据)(运行的 ip,端口 port,健康的状态监控等,因为使用的是 http/ResuFul 请求风格),eureka-server 会在自己内部保留这些元数据(内存中)。(有一个服务列表)restful 格,以 http 动词的请求方式,完成对 url 资源的操作)
2 服务的续约
项目启动成功了,除了向 eureka-server 注册自己成功,还会定时的向 eureka-server 汇报自己,心跳,表示自己还活着。(修改一个时间)
3 服务的下线(主动下线)
当项目关闭时,会给 eureka-server 报告,说明自己要下机了。
4 服务的剔除(被动下线,主动剔除)
当项目超过了指定时间没有向 eureka-server 汇报自己,那么 eureka-server 就会认为此节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。
二、Eureka 源码分析
了解他的原理 出了问题排查 bug,优化你的代码
1 Eureka 运作原理的特点
Eureka-server 对外提供的是 restful 风格的服务
http 动词的形式对 url 资源进行操作 get post put delete
http 服务 + 特定的请求方式 + 特定的 url 地址
只要利用这些 restful 我们就能对项目实现注册和发现
只不过,eureka 已经帮我们使用 java 语言写了 client,让我们的项目只要依赖 client 就能实现注册和发现!
只要你会发起 Http 请求,那你就有可能自己实现服务的注册和发现。不管你是什么语言!
三、服务注册的源码分析【重点】

Eureka-client 发起注册请求
1.源码位置

2 如何发送信息注册自己

 

3 真正的注册 AbstractJerseyEurekaHttpClient

 

总结:
eureka 启动的时候,会向我们指定的 serviceUrl 发送请求,把自己节点的数据以 post请求的方式,数据以 json 形式发送过去。
当返回的状态码为 204 的时候,表示注册成功。
Eureka-server 实现注册+保存

 1 接受客户端的请求

com.netflix.eureka.resources.ApplicationResource

2 源码位置

 

3 接受 client 的注册请求

 

4 处理请求(注册自己,向其他节点注册)

 

5 真正的注册自己

 

服务注册总结 

重要的类:
DiscoveryClient 里面的 register()方法完后注册的总体构造
AbstractJerseyEurekaHttpClient 里面的 register()方法具体发送注册请求(post
InstanceRegistry 里面 register()方法接受客户端的注册请求
PeerAwareInstanceRegistryImpl 里面调用父类的 register()方法实现注册
AbstractInstanceRegistry 里面的 register()方法完成具体的注册保留数据到 map 集合保存服务实例数据的集合:
第一个 key 是应用名称(全大写) spring.application.name
Value 中的 key 是应用的实例 id
eureka.instance.instance-id
Value 中的 value 是 具体的服务节点信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_11322.aspx

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

相关文章

P02 反射

P02 反射1.反射概述1.1 反射的基本作用1.2 反射的关键2.反射获取类对象2.1 forName(String className)2.2 类名.class2.3 对象.getClass()3.反射获取构造器对象![在这里插入图片描述](https://img-blog.csdnimg.cn/e234dd155af94a5c80223d64b112f4bf.png)3.1 Class 类中用于获取…

18.Composition API(四)高级语法补充

1.自定义指令 之前我们学习了各种指令:v-model、v-for、v-show等,除了这些指令外,Vue允许我们自定义指令。 什么时候使用自定义指令? 需要对DOM元素进行底层操作,这个时候就会用到自定义指令。 注意:在V…

第二章 ES数据操作与集群

一、回顾 1.介绍ES 2.ES原理 3.ES功能 4.ES使用场景 5.ES安装 1)ES配置文件(单点配置) [root@es01 ~]# grep ^[a-z] /etc/elasticsearch/elasticsearch.yml node.name: es-1 path.data: /data/es/data path.logs: /data/es/log bootstrap.memory_lock: true network.host: 1…

Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8

因为另一台机器开发时,android studio提示更新什么东西,无脑点了。 导致原先的那台开发机器,无法build,报异常: Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8 有两个方法解决: 1、修改jdk从1.8改到11如果没有这个选项,可能需要安装…

高项重点内容

BI,商业智能 联机事务处理OLTP主要是执行基本日常的事务处理,比如数据库记录的增删查改。比如在银行的一笔交易记录,就是一个典型的事务。联机分析处理是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持&…

Java高级:IO

笔记来源:尚硅谷Java入门视频教程(在线答疑Java面试真题) 文章目录一 File类的使用1.1 基本概述1.2 File类的常用构造器1.3 路径分隔符1.4 File类常用方法二 IO流原理及流的分类2.1 IO原理2.2 流的分类2.3 节点流和处理流2.4 InputStream & Reader2.4.1 InputSt…

mini LED显示屏—点胶测量

mini LED显示屏作为一种LED的一种技术,其产品已开始应用于超大屏高清显示,如监控指挥、高清演播、高端影院、医疗诊断、广告显示、会议会展、办公显示、虚拟现实等商用领域。 而本次测量mini LED显示屏胶水高度。测试采样步距间隔大小的测量精度&#xf…

基于PHP的校园二手信息网站的设计与实现毕业设计源码251656

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手信息网站系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2…

压裂反排液除氨氮树脂技术

项目名称 中国石油工程建设除氨氮项目 工艺选择 沉淀工艺软化系统膜系统离子交换脱氨系统,出水稳定在0.2mg/l 工艺原理 页岩气开采反排液,经过沉淀工艺后进入软化系统,然后经过反渗透工艺后进行离子交换脱氨工艺。 下面这个案例分享是科…

戴尔笔记本重装系统硬盘加密怎么解除

​bitlocker加密可以很好地保护计算机中的数据,那么dell电脑硬盘的bitlocker加密如何解除 ?小编给大家介绍一下解除戴尔笔记本硬盘加密的方法。 工具/原料: 系统版本:windows10系统 品牌型号:戴尔 方法/步骤: 解…

Methyltetrazine-Maleimide,甲基四嗪-马来酰亚胺 一种可降解ADC linker

●中文名:甲基四嗪-马来酰亚胺 ●英文:Methyltetrazine-Maleimide ●外观以及性质:红色固体,Methyltetrazine-Maleimide 是一种可降解 (cleavable) 的 ADC linker,可用于合成抗体偶联药物 (ADC)。其次是一种点击化学马…

【云原生 | 从零开始学Kubernetes】二十二、kubernetes持久化存储下

该篇文章已经被专栏《从零开始学k8s》收录 上一篇文章:kubernetes持久化存储上 点击跳转 持久化存储下k8s 持久化存储:hostPathk8s 持久化存储:nfsk8s 持久化存储: PVCk8s PV 是什么?k8s PVC 是什么?k8s PV…

【Docker】简单搭建Portainer

既然是家用的Docker那就不上Rancher了,直接通过Portainer轻量化解决所有问题。还好最新的Portainer还是很人性化的,搭建也比较简单,说白了原理就是直接通过宿主机的Docker进行同调(这个可以通过下面的启动语句得知)。 …

MySQL数据库之进阶查询语句

目录 一、常用查询 1、按关键字查询 ①升序排序 ②降序排序 ③结合where进行条件过滤 ④多字段排序 2、and和or判断 ①and和or的使用 ②嵌套、多条件使用 3、distinct 查询不重复记录 4、group by 对结果进行分组 5、limit限制结果条目 6、设置别名&#xff…

Sentinel核心算法设计与实现

这里我们先一起了解一下Sentinel的一些比较重要的概念 ,Sentinel 整体工作流程采用责任链模式,功能定义Slot,计数通过Node,在Slot中通过选用不同的Node实现不同的流控模式。 Node 用于不同纬度的计数Slot 实现不同的功能Resource 受保护的资源Rule 保护资源规则 回顾完了S…

跟踪元素可视?试试Intersection Observer

本文将讲解Intersection Observer的用法及其polyfill的原理,我们一起来看下。背景现在有以下几种场景。页面滚动时懒加载图片实现无线滚动页面(Infinite scrolling)根据某个元素是否出现在视窗从而执行某些逻辑对于这些传统的实现…

ONES 参与《软件研发效能权威指南》编写

9月16-17日,2022 年 QECon 全球软件质量&效能大会在上海举行,ONES 联合创始人兼 CTO 冯斌受邀参加本次大会,并做了主题为《大型软件团队项目管理数字化实践》的分享。演讲剖析了百人以上大型团队的研发管理痛点,并结合 ONES 丰…

Sqlserver 根据父节点ID查询所有子节点

举例: 根据父节点ID查询出所有子节点 不含父节点DECLARE @ParentID int SET @ParentID=3; with CTEGetChild as ( select * from [dbAssetCheck-yili].[dbo].[vFinaceDepartment] where PFDepartmentId=@ParentID UNION ALL (SELECT a.* from [dbAssetCheck-yili].[dbo].[vFi…

【JavaWeb篇】快速学习MyBatis|实战项目详解

作者主页:橙子! 主页 系列专栏:JavaWeb基础教程系列 精彩回顾:HTTP协议详解 文章目的:快速学习MyBatis及实战项目详解 文章目录1.什么是MyBatis?2. JDBC存在的缺点3.Mybatis简化JDBC开发4.MyBatis快速入门1.什么是MyBatis? 简单…

工具推荐-使用RedisInsight工具对Redis集群CURD操作及数据可视化和性能监控

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…