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

下面是详细讲解“深入理解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日

相关文章

  • vue隐藏路由的实现方法

    Vue隐藏路由的实现方法攻略 在Vue中,隐藏路由可以通过以下几种方法实现。下面将详细介绍每种方法,并提供两个示例说明。 方法一:使用v-if指令 可以使用v-if指令根据条件来隐藏或显示路由。通过在路由组件的父组件中设置一个变量,根据这个变量的值来决定是否渲染路由组件。 示例1:隐藏路由组件 <template> <div> &lt…

    other 2023年7月28日
    00
  • Golang栈结构和后缀表达式实现计算器示例

    Golang栈结构和后缀表达式实现计算器示例攻略 本攻略将详细讲解如何使用Golang的栈结构和后缀表达式来实现一个简单的计算器。后缀表达式,也称为逆波兰表达式,是一种不需要括号的数学表达式表示方法,其中操作符位于操作数之后。 步骤1:创建栈结构 首先,我们需要创建一个栈结构来存储操作数和中间结果。栈是一种后进先出(LIFO)的数据结构,我们可以使用Gola…

    other 2023年8月6日
    00
  • oracle 使用sql获取数据库表、表的字段的多种方法

    下面是详细的步骤和示例: 1. 使用DESC命令获取表结构信息 步骤 登录Oracle数据库,切换到要查询的Schema; 使用DESC命令加上表名,即可获取该表的列信息。 示例: SQL> DESC users; Name Null? Type —————————————- ——– —…

    other 2023年6月25日
    00
  • iphone x怎么清理内存?iphone X清理手机内存教程

    iPhone X清理手机内存教程 清理iPhone X的内存可以帮助提高设备的性能和响应速度。下面是一些方法可以帮助你清理iPhone X的内存。 方法一:关闭不必要的应用程序 关闭不必要的应用程序可以释放内存并提高设备的性能。以下是如何关闭应用程序的步骤: 双击iPhone X的Home按钮,以打开最近使用的应用程序列表。 在最近使用的应用程序列表中,向左…

    other 2023年8月1日
    00
  • git checkout 命令使用详解

    Git Checkout 命令使用详解 概述 Git Checkout 是一个常用的 Git 命令,用于切换 Git 工作目录中的分支或者回到某个特定的提交状态。 命令格式 该命令的格式为: git checkout <branch> 或者 git checkout <commit> 其中 <branch> 可以是分支名、…

    other 2023年6月26日
    00
  • 如何在centos7上安装yarn

    如何在CentOS 7上安装Yarn Yarn是由Facebook开发的新一代包管理器,可用于管理Node.js包。Yarn比npm包管理器更快且可靠,同时支持同时下载和安装多个NPM包。本文将向您展示如何在CentOS 7上安装Yarn。 步骤1 – 安装NodeJS Yarn是一个基于NodeJS的包管理器,因此必须先安装Node.js。在CentOS …

    其他 2023年3月29日
    00
  • 织梦中arclist调用附加字段的方法

    使用织梦(DedeCMS)时,我们可以添加一些自定义的附加字段(如作者、副标题、来源等)来丰富文章内容。当需要调用这些附加字段时,我们可以采用arclist调用的方式。 以下是调用附加字段的步骤: 在文章发布时,添加附加字段 首先,我们需要在文章发布页面中添加附加字段。我们可以进入“织梦管理后台”->“内容管理”->“文章发布”,在该页面下方可以…

    other 2023年6月25日
    00
  • 中文Access2000速成教程–1.8 定义表之间的关系

    定义表之间的关系 在数据库中,可以通过定义表之间的关系来更好地组织数据和更新数据。关系可以定义在两个表之间,一个主表和一个子表之间,或者一个表和自己之间。 关系的类型 主键和外键是定义表之间关系的重要基础。主键是一个字段或一组字段,用于唯一地标识表中的每一行数据。外键是另一个表的主键,它用于链接两个表,以建立它们之间的关系。 常见的关系类型包括: 一对一关系…

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