当前位置:首页 > 服务端 > 高频面试之Eureka

高频面试之Eureka

2022年11月07日 10:19:07服务端8
1、简介

注册中心,包含了服务发现、治理等功能。@EnableEurekaServer,作为注册中心;@EnableEurekaClient,作为服务的提供者、或消费者。下面分析下服务发现和治理。

2、注册服务

当EurekaClient启动后,首先会执行服务注册。

  • EurekaClient将服务信息封装成InstanceInfo对象,通过EurekaHttpClient调用register方法发送POST请求执行服务注册
  • EurekaServer提供了基于Jersey的Rest风格的接口,在ApplicationResource类中提供了addInstance方法用来接收注册信息。如果注册服务器信息通过校验,将服务信息保存至本地注册表。数据结构为双层ConcurrentHashMap,外层map:key是应用名,内层map:key是应用实例信息编号,value是InstanceInfo
  • EurekaClient接收并解析注册结果,判断httpResponse的statusCode,如果是204则代表注册成功
  • 调用replicateToPeers方法将此次注册信息复制到对等的Eureka节点
3、定时任务
3.1 拉取服务器注册实例
  • 该任务通过 ScheduledExecutorService 来实现任务调度,执行周期默认为 60 秒一次
  • 获取的方式有两种,全量获取和增量获取。第一次全量获取,后续增量获取;获取到服务器注册实例信息后,保存、或跟新到本地
3.2 续约
  • 该任务通过 ScheduledExecutorService 来实现任务调度,默认周期为 30 秒一次,
  • 通过 renew() 方法发起续约请求。将 AppName、AppId、以及InstanceInfo作为参数,通过EurekaHttpClient发送Http请求
  • EurekaServer 通过 renewLease() 方法接收续约请求
  • 首先根据AppName从注册表中获取对应的服务信息,并更新一些属性如renewsLastMin、lastUpdateTimestamp
  • EurekaServer 返回结果,200 或者 404
  • EurekaClient 接收续约结果;如果是 404 则发起一次 register 请求;如果是 200 则表示续约成功,更lastSuccessfulHeartbeatTimestamp 变量
3.3 剔除服务
  • 通过 JDK 自带的 Timer 来实现任务调度,通过 evict() 方法执行具体的操作
  • 首先判断是否开启了实例自我保护机制,如果开启自我保护,则不做任何操作
  • 如果未开启,根据 lastUpdateTimestamp 收集已过期的服务,加入到List集合中
  • 通过 internalCancel() 方法,在该方法中从 registry 中剔除已经过期的实例。具体的剔除过程会通过打乱过期服务列表,并通过 Random 随机剔除,保证服务器剔除的均匀性

作者:闲来也无事
来源链接:https://blog.csdn.net/lyc_liyanchao/article/details/120060221

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68300.html

分享给朋友:

“高频面试之Eureka” 的相关文章

一文高效图解二叉树面试题

一文高效图解二叉树面试题

点击蓝色“码出高效面试的程序媛”关注我, 了解更多技术流行面试题 二叉树,搜索二叉树,是算法面试的必面题。聊聊面试点: 一、树 & 二叉树 树的组成为节点和边,节点用来储存元素。节点组成为根节点、父节点和子节点。 如图:树深 leng...

看完这篇Exception 和 Error,和面试官扯皮就没问题了

看完这篇Exception 和 Error,和面试官扯皮就没问题了

在 Java 中的基本理念是 结构不佳的代码不能运行,发现错误的理想时期是在编译期间,因为你不用运行程序,只是凭借着对 Java 基本理念的理解就能发现问题。但是编译期并不能找出所有的问题,有一些 NullPointerException 和 ClassNotFoundExceptio...

java基础面试题:运行时异常与一般异常有何异同?error和exception有什么区别? 请写出你最常见到的5个runtimeexception?

Throwable是Java错误处理的父类,有两个子类:Error和Exception。   Error:无法预期的严重错误,导致JVM虚拟机无法继续执行,几乎无法恢复捕捉的 Exception:可恢复捕捉的。java健壮程序的手段。  ...

近期安卓与IOS招聘面试有感

版权声明:本文出自汪磊的博客,转载请务必注明出处。 一、你总是想一步登天,却不知道路是一步步走出来的 大概是放年假前一个月开始招聘吧,陆陆续续到目前为止安卓面试10几个,IOS面试了15个左右,本以为很好招聘的,没想到没有一个合适的,要求本不高只想基础扎实一些,但是就这一条...

20200103面试知识点整理

涉及到的知识 优先级从高到底Java基础线程数据库框架微服务(boot+cloud)缓存(redis)linux(比如说线上日志查找报错) 相应的知识点网站 https://github.com/Cyc2018/CS-Notes...

java面试题栈

JavaEE面试题收集 Java EE平台构建于Java SE平台之上,Java EE平台提供一组API和运行环境来开发和运行大规模的,多层的,可扩展的,可靠的和安全的网络应用程序。这里会不断收集和更新JavaEE基础相关的面试题,目前已收集84题...

各大公司java后端开发面试题

ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。ThreadLoc...

互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?

互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?

引自:“ 石杉的架构笔记”公众号 (1)背景引入   今天跟大家聊一个互联网大厂的Java面试题:使用无界队列的线程池会导致内存飙升吗?   因为在面互联网大厂的时候,一定会问并发,问并发的时候一定会问到线程池,问到线程池一定...

(python)剑指Offer 面试题51:数组中重复的数字

(python)剑指Offer 面试题51:数组中重复的数字

问题描述   在长度为n的数组中,所有的元素都是0到n-1的范围内。 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字。 例如,输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出为2或3。   解题思...

Java面试题_第三阶段(Spring、MVC、IOC、AOP、DI、MyBatis、SSM、struts2)

Java面试题_第三阶段(Spring、MVC、IOC、AOP、DI、MyBatis、SSM、struts2)

1.1 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗? 答:1)用于创建bean对象,管理bean对象的那个容器。 2)Spring IOC 容器本质上指的的就是Spring Bean容器,Spring Bea...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。