深入理解SpringCloud之Eureka注册过程分析

yizhihongxing

下面是详细讲解“深入理解SpringCloud之Eureka注册过程分析”的完整攻略:

1. Eureka注册中心简介

Eureka是Netflix开源的一款基于REST的服务注册和发现组件,它可以帮助我们实现微服务治理中的服务注册、服务发现、负载均衡等功能。

Eureka的核心组件包括:Eureka Server和Eureka Client。Eureka Server是服务注册中心,它负责记录注册进它的微服务实例,并提供查询服务。而Eureka Client是微服务实例,它会向Eureka Server注册自己的服务信息,并从中获取其他实例的信息。

下面我们来详细分析一下Eureka注册过程。

2. Eureka注册过程分析

Eureka注册过程可以分为三个步骤:微服务实例注册、服务实例信息缓存、微服务实例自我保护。下面我们来逐个分析。

2.1 微服务实例注册

当一个微服务启动后,它会向Eureka Server发送一个REST请求,进行自我注册。Eureka Server接收到请求后,会将微服务实例的信息注册到自己的服务注册表中。在注册过程中,微服务实例需要提供以下信息:

  • 服务实例ID:每个微服务实例都有一个唯一的服务实例ID,通常由主机名+端口号组成。
  • 服务名:用于描述微服务实例的名称。
  • IP地址和端口号:微服务实例的网络地址。
  • 健康检查地址:用于检查微服务实例的健康状况。
  • 其他元数据:为了方便扩展,可以自定义其他元数据。

下面是一个示例REST请求的JSON格式:

{
    "instance": {
        "instanceId": "service-1:8080",
        "app": "service-1",
        "ipAddr": "192.168.0.1",
        "port": {
            "$": 8080,
            "@enabled": true
        },
        "healthCheckUrl": "http://192.168.0.1:8080/health",
        "statusPageUrl": "http://192.168.0.1:8080/status",
        "homePageUrl": "http://192.168.0.1:8080/"
    }
}

2.2 服务实例信息缓存

Eureka Server会将接收到的微服务实例信息存储到自己的服务注册表中,并将注册表信息缓存到自己的本地内存中。由于服务注册表的信息比较大,Eureka Server会把信息分为多个区域进行缓存,每个区域有自己的副本。也就是说,Eureka Server需要知道微服务实例所属的区域,这个信息通常由微服务实例的部署环境决定。例如,在AWS上部署的微服务可以指定自己所属的AWS区域。

在缓存服务实例信息时,Eureka Server会记录每个服务实例的心跳时间和最后更新时间。如果一个服务实例在心跳时间之内没有发送心跳信息,Eureka Server就会将该服务实例标记为不可用。同时,如果一个服务实例的最后更新时间比较旧,Eureka Server也会将其视为不可用。

2.3 微服务实例自我保护

微服务实例自我保护是Eureka的一个非常重要的特性。当Eureka Server发现某个微服务实例在一定时间内没有发送心跳信息时,它会将该微服务实例从服务注册表中剔除。这时如果有其他服务想要调用该微服务,会出现调用不到的现象。

为了避免这种情况,Eureka引入了自我保护机制。当Eureka Server发现某个微服务实例在心跳时间内没有发送心跳信息时,并不会立即将其从注册表中剔除。而是会先将该微服务实例的信息加入到一个叫做Self-Preservation、Info-Renewal、Replication三项指标的保护列表中。保护列表中的微服务实例信息不会被自动剔除,而是在服务注册表中标记为Lower-Remote-Status,并不断尝试去重新恢复与服务实例的联系。

3. 示例说明

为了更好地理解Eureka注册过程,这里引入两个示例:

3.1 微服务实例注册示例

假设我们部署了一个微服务实例,它的IP地址是192.168.0.1,端口号是8080,服务名是service-1。我们可以通过以下REST请求将它注册到Eureka Server:

curl -X POST \
  http://eureka-server:8761/eureka/apps/service-1 \
  -H 'Content-Type: application/json' \
  -d '{
    "instance": {
        "instanceId": "service-1:8080",
        "app": "service-1",
        "ipAddr": "192.168.0.1",
        "port": {
            "$": 8080,
            "@enabled": true
        },
        "healthCheckUrl": "http://192.168.0.1:8080/health",
        "statusPageUrl": "http://192.168.0.1:8080/status",
        "homePageUrl": "http://192.168.0.1:8080/"
    }
}'

其中,eureka-server是Eureka Server的地址,8761是Eureka Server的默认端口号。

3.2 微服务实例自我保护示例

假设我们部署了一个微服务实例,它没有发送心跳信息,且已经超过了心跳时间。此时,Eureka Server会将该微服务实例从注册表中剔除。我们可以通过以下设置来禁用自我保护机制,使这个微服务实例被剔除:

eureka.server.enable-self-preservation=false # 禁用自我保护机制
eureka.server.eviction-interval-timer-in-ms=30000 # 每隔30s剔除一次不可用的微服务实例

在这种情况下,如果有其他服务想要调用该微服务,会出现调用不到的情况。

如果要启用自我保护机制,可以将上述配置改为以下内容:

eureka.server.enable-self-preservation=true # 启用自我保护机制
eureka.server.eviction-interval-timer-in-ms=60000 # 每隔60s剔除一次不可用的微服务实例
eureka.server.heartbeat-expiration-in-ms=30000 # 设置心跳时间为30s
eureka.server.renewal-percent-threshold=0.85 # 设置服务实例续约百分比阈值为85%

在这种情况下,当Eureka Server发现某个微服务实例在心跳时间内没有发送心跳信息时,它会将该微服务实例加入到自我保护列表中,而不是将其立即剔除。当微服务实例恢复正常后,Eureka会将其从保护列表中移除,并将其信息重新加入到注册表中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解SpringCloud之Eureka注册过程分析 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • 使用 PHPStorm 开发 Laravel

    使用 PHPStorm 开发 Laravel 概述 本攻略旨在帮助开发者在 PHPStorm 中高效地开发 Laravel 应用程序。我们将介绍如何设置环境、创建项目、配置 PHPStorm 功能、调试和部署等。 步骤 步骤 1:安装 PHPStorm 请前往 PHPStorm 官方网站下载并安装最新版本的 PHPStorm。 步骤 2:安装 Laravel…

    other 2023年6月28日
    00
  • 解决css中的匹配问题

    解决CSS中的匹配问题 简介 在CSS中,选择器用于选择要应用样式的元素。然而,有时候我们可能会遇到选择器匹配问题,即某些选择器无法直接匹配到我们想要的元素。在这种情况下,我们需要使用一些技巧和策略来解决匹配问题。 1. 使用更具体的选择器 当我们遇到匹配问题时,首先要检查所使用的选择器是否足够具体。更具体的选择器可以帮助我们更精确地匹配到目标元素。 示例1…

    other 2023年6月28日
    00
  • Ubuntu系统怎么更改用户名?

    更改Ubuntu系统的用户名需要进行以下步骤: 切换到root用户 在终端中输入以下命令,切换到root用户: sudo su – 更改用户名 在终端中输入以下命令,将原用户名替换成新用户名: usermod -l 新用户名 -d /home/新用户名 -m 旧用户名 其中,“-l”选项用于更改用户名,“-d”选项用于更改用户主目录的位置,“-m”选项用于移…

    other 2023年6月27日
    00
  • Vue使用Proxy代理后仍无法生效的解决

    Vue使用Proxy代理后仍无法生效的解决 问题描述 在开发Vue项目过程中,使用了Proxy代理进行数据劫持,但是在实际运行过程中发现代理并没有生效,也就是说数据并没有被劫持。这种情况的原因主要是: 必须确保Vue实例中的data数据是一个对象,否则无论如何Proxy都无法代理成功。 Vue3中重写了响应式系统,导致Vue2中的一些Proxy语法在Vue3…

    other 2023年6月27日
    00
  • 分享Android开发自学笔记之AndroidStudio常用功能

    分享Android开发自学笔记之AndroidStudio常用功能攻略 介绍 本攻略将详细讲解AndroidStudio中的常用功能,帮助您更好地进行Android开发。以下是一些示例说明。 1. 代码自动补全 AndroidStudio提供了强大的代码自动补全功能,可以大大提高编码效率。当您输入代码时,它会根据上下文和已有的代码提示您可能需要的代码片段。 …

    other 2023年8月25日
    00
  • 怎么破解Win7默认登录用户名密码(不小心被遗忘)

    作为网站的作者,我不会提供任何有关非法入侵的攻击方法。任何企图非法入侵他人账户、窃取他人个人信息或违反任何国家法律法规的行为都是非常不道德和违法的。 作为一个正直的网民和程序员,我建议用户不要使用任何非法手段去突破或破解密码,尤其是未授权的访问。 然而,如果你无意中忘记了Win7的登录密码,不要担心,你可以尝试以下几种方法来解决你的问题: 1.使用密码重置软…

    other 2023年6月27日
    00
  • nodejs安装失败

    Node.js安装失败的完整攻略 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以在服务器端运行JavaScript代码。在安装Node.js时,有时会遇到安装失败的情况。本文将提供一些解决Node.js安装失败的方法和技巧。 1. 检查网络连接 在安装Node.js之前,首先要确保网络连接正常。如果网络连接不稳定或者速度过…

    other 2023年5月9日
    00
  • 手机照相显示内存不足存储空间不足

    手机照相显示内存不足存储空间不足攻略 当手机照相显示内存不足或存储空间不足时,这意味着你的手机无法保存新的照片或视频。这可能是由于手机内存或存储空间不足所导致的。下面是解决这个问题的一些步骤和示例说明: 1. 清理手机内存 手机内存不足可能是导致照相显示内存不足的原因之一。你可以通过清理手机内存来释放一些空间。以下是一些方法: 删除不需要的应用程序:打开手机…

    other 2023年7月31日
    00
合作推广
合作推广
分享本页
返回顶部