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 随机剔除,保证服务器剔除的均匀性

高频面试之Eureka相关推荐

  1. 深度解析HashMap高频面试及底层实现架构!

    深度解析HashMap高频面试及底层实现架构! HashMap高频面试题 1,Map接口和List接口是什么关系? 2.Map有哪些常用的实现类? 3.请阐述HashMap的put过程? 4.链表中是 ...

  2. java高频面试_C ++或Java,高频交易哪个更快?

    java高频面试 总览 关于什么是高频交易的最佳解决方案,存在不同意见. 问题的一部分是高频交易的变化超出您的预期,另一部分是更快的含义. 我的看法 如果您有一个典型的Java程序员和一个典型的C + ...

  3. 高频面试真题答案 -java后端 -Redis篇

    原贴: 2022届秋招高频面试真题汇总,千题奉送!!!- 后端篇_笔经面经_牛客网 整理答案: Redis问题与解决方案 缓存穿透.缓存雪崩原因及解决方案 36 Redis缓存与如何保证数据一致性问题 ...

  4. 大厂高频面试系列02--最长不重复子串问题(LeetCode)

    大厂高频面试系列02--最长不重复子串问题(LeetCode) 题目描述: 给定一个字符串,找出不含有重复字符的最长子串的长度. 举例: 给定 "abcabcbb" ,没有重复字符 ...

  5. 视频教程-大牛带你全面剖析Python高频面试真题-Python

    大牛带你全面剖析Python高频面试真题 毕业于德国奥格斯堡大学计算机系,先从事分布式网络,搜索引擎等领域的设计开发工作,于2017底混入图灵学院,立志挑战传统培训,做中国最好的Python教育 刘英 ...

  6. 高频面试真题答案 -java后端 -java基础篇

    原贴 2022届秋招高频面试真题汇总,千题奉送!!!- 后端篇_笔经面经_牛客网 整理答案: 类加载机制 47 双亲委派机制 24 new一个对象的过程 4 java程序是如何运行起来的? 1 jvm ...

  7. NLP高频面试_CodingPark编程公园

    NLP高频面试 1.LSTM 画图,写公式 计算一层的参数量 假设lstm层的一个时间点上的输入特征长度是n,输出长度是m, 那么参数量是4*((n+m)*m+m) https://www.cnblo ...

  8. 高频面试真题答案 -java后端 -OS篇

    原贴: 2022届秋招高频面试真题汇总,千题奉送!!!- 后端篇_笔经面经_牛客网 进程管理 进程与线程的区别 69 常见的进程调度算法 16 线程的状态 9 进程的状态 7 面试/笔试第二弹 -- ...

  9. Android工程师面试屡被拒:比贫穷脱发更恐怖的是你还不知道这些高频面试真题

    前言 如果说求职是人生的一道坎,那么面试就是最难翻越的那一块砖. 当你经历过大大小小的面试之后,就会发现不同的公司.不同的面试官问的问题都大同小异,因为企业对于挑选人才是有一些共性的要求的,只要在面试 ...

  10. 一文通透从输入URL到页面渲染的全过程----高频面试

    一文通透从输入URL到页面渲染的全过程----高频面试 喜欢大海 喜欢夕阳 写下便是永恒 文章目录 一文通透从输入URL到页面渲染的全过程----高频面试 重温 进程与线程 什么是进程 什么是线程 进 ...

最新文章

  1. Windows7下配置MinGW+CodeBlocks+OpenCV2.3.1
  2. 没有熙熙攘攘,百度VR在世界大会的一场奇妙之旅
  3. mysql模糊查询不会区分大小写_MySQL模糊查询(like)时区分大小写
  4. 《R语言实战》第7章
  5. python与mysql数据库_python与MySQL数据库
  6. Linux 内核的文件 Cache 管理机制介绍
  7. rsatool使用步骤图解_图解360系统重装大师如何使用
  8. 机器学习中的Bias、Variance
  9. 使用HTML5 FormData轻松完成Ajax表单提交
  10. 微信小程序|开发实战篇之八-list列表组件及其子组件
  11. python匿名函数(lambda)
  12. java aop管理权限_基于spring aop 权限管理系统原型 - andyj2ee - BlogJava
  13. 刚进职场的新人,这6点一定要牢记
  14. 数据结构和算法———P2 算法概述
  15. 制作OTA U盘升级包
  16. Telink/BDT使用说明
  17. 信息差怎么赚钱?这个小众项目完全0门槛
  18. 蓝牙定位网关-蓝牙网关通过三角定位获取蓝牙设备的位置
  19. vue计算本周是今年的第几周
  20. 字符串转换,大写变小写,小写变大写

热门文章

  1. tx2 安装 Anaconda
  2. nginx做反向代理网站加载验证码图片不出来
  3. 软件人员kpi制定模板_员工绩效考核评分表模板
  4. 摩擦学类毕业论文文献都有哪些?
  5. ESP32 flash 加密测试
  6. win10上U盘插到电脑上无法显示盘符也打不开怎么办
  7. VSCode搭建STM32开发环境
  8. 从零开始搭建一个自己的脚手架
  9. Navicat备份数据库和还原数据库详解
  10. .net core系列源码地址介绍