当前位置: 首页 > article >正文

滚雪球学SpringCloud[2.1]:服务注册中心Eureka

全文目录:

    • 前言
    • 2.1 服务注册中心Eureka
      • Eureka简介与工作原理
        • Eureka的工作原理
      • 配置Eureka Server
      • 配置Eureka Client
      • Eureka的自我保护机制
        • 自我保护机制的工作原理
        • 配置自我保护机制
    • 预告

前言

在上一篇文章中,我们对SpringCloud的概念和微服务架构的基础进行了详细的介绍。我们讨论了SpringCloud的背景与起源,了解了微服务架构的优势和挑战,并初步了解了SpringCloud在微服务中的关键角色。我们还通过一个简单的案例,展示了如何快速搭建一个微服务系统,为大家理解SpringCloud的应用提供了一个基础。

随着微服务系统的规模不断扩大,服务数量的增加,服务间的通信和管理变得愈加复杂。这时候,一个有效的服务注册和发现机制显得尤为重要。Eureka作为SpringCloud生态系统中的重要组成部分,承担着服务注册中心的角色,确保微服务之间能够高效、可靠地相互发现和通信。

本篇文章将深入探讨Eureka服务注册中心的工作原理与配置,帮助大家理解如何在SpringCloud微服务架构中使用Eureka实现服务注册与发现。

2.1 服务注册中心Eureka

Eureka简介与工作原理

Eureka是Netflix开发的一个服务注册和发现组件,作为SpringCloud中的核心组件之一,广泛应用于微服务架构中。Eureka允许各个微服务在启动时将自己的信息注册到Eureka Server中,其他微服务可以通过Eureka Server来查找和调用已经注册的服务。这种机制使得服务可以动态扩展,系统具有很强的容错能力。

Eureka的工作原理

Eureka的工作流程主要包括以下几个步骤:

  1. 服务注册:服务在启动时,将自己的网络位置信息(如IP地址、端口号等)注册到Eureka Server中。Eureka Server将这些信息存储在注册表中。
  2. 服务发现:当一个服务需要调用另一个服务时,它首先向Eureka Server发送请求,查询目标服务的地址。Eureka Server根据注册表返回相应的服务实例信息。
  3. 心跳机制:服务在运行过程中,会定期向Eureka Server发送心跳请求,以表明自己仍然正常运行。如果Eureka Server长时间未收到某个服务的心跳请求,将认为该服务已经不可用,并将其从注册表中移除。
  4. 服务摘除:当一个服务实例停止或崩溃时,它将从Eureka Server的注册表中被移除,防止其他服务继续向不可用的服务实例发送请求。

Eureka的这种动态注册与发现机制,使得微服务系统具备了很高的灵活性和可扩展性。

配置Eureka Server

要在SpringCloud项目中配置Eureka Server,我们可以按照以下步骤进行操作:

  1. 创建Eureka Server项目:首先,使用Spring Initializr创建一个新的Spring Boot项目,选择Eureka Server依赖。

  2. 配置application.yml:在项目的src/main/resources/application.yml文件中,配置Eureka Server的相关信息:

    server:
      port: 8761
    
    eureka:
      client:
        register-with-eureka: false
        fetch-registry: false
      server:
        enable-self-preservation: true
    
    • server.port:指定Eureka Server的端口号。
    • eureka.client.register-with-eureka:设置为false,因为Eureka Server本身不需要注册到其他Eureka Server。
    • eureka.client.fetch-registry:设置为false,因为Eureka Server本身不需要从其他Eureka Server获取注册表。
  3. 启动Eureka Server:在主类上添加@EnableEurekaServer注解,然后运行该类以启动Eureka Server。

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }
    

    启动后,你可以在浏览器中访问http://localhost:8761,查看Eureka Server的控制台界面。

配置Eureka Client

Eureka Client是指那些向Eureka Server注册的微服务。要配置Eureka Client,可以按照以下步骤进行:

  1. 创建微服务项目:使用Spring Initializr创建一个新的Spring Boot项目,选择Eureka Discovery Client依赖。

  2. 配置application.yml:在项目的src/main/resources/application.yml文件中,配置Eureka Client的相关信息:

    spring:
      application:
        name: demo-service
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    
    • spring.application.name:指定服务的名称,将用于在Eureka Server中标识该服务。
    • eureka.client.service-url.defaultZone:指定Eureka Server的地址,客户端将向这个地址注册自己。
  3. 启动Eureka Client:在主类上添加@EnableEurekaClient注解,然后运行该类以启动Eureka Client。

    @SpringBootApplication
    @EnableEurekaClient
    public class DemoServiceApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoServiceApplication.class, args);
        }
    }
    

    启动后,该服务将自动注册到Eureka Server中,并可以在Eureka Server的控制台界面中查看。

Eureka的自我保护机制

Eureka Server有一个非常重要的特性,称为自我保护机制(Self-Preservation)。这个机制旨在防止因为网络问题或短暂的故障,导致Eureka Server错误地将所有服务实例都从注册表中移除。

自我保护机制的工作原理

当Eureka Server在短时间内检测到大量服务实例的心跳丢失时,它将进入自我保护模式。在这种模式下,Eureka Server不会立即移除这些服务实例,而是会继续保留它们在注册表中,以保证服务的可用性。

自我保护机制确保了在网络分区或其他临时故障情况下,系统仍然能够保持稳定,而不会因为误判导致服务不可用。

配置自我保护机制

自我保护机制在Eureka Server中默认是开启的。如果需要关闭该机制,可以在application.yml文件中进行配置:

eureka:
  server:
    enable-self-preservation: false

虽然关闭自我保护机制可以让Eureka Server更加及时地清理不可用的服务实例,但这也增加了因为网络抖动等原因导致的误判风险。因此,是否启用自我保护机制应根据具体的业务需求和网络环境来决定。

预告

在本期内容中,我们详细介绍了Eureka服务注册中心的工作原理与配置,包括如何搭建Eureka Server、配置Eureka Client以及理解Eureka的自我保护机制。Eureka是SpringCloud生态系统中非常重要的一个组件,它为微服务的动态扩展和高可用提供了强有力的支持。

下一期内容中,我们将深入探讨另两个常见的服务注册中心工具——Consul和Zookeeper。我们将对比它们与Eureka的区别,并详细讲解如何配置和使用它们。在选择服务注册工具时,理解各自的优缺点至关重要。敬请期待!


http://www.kler.cn/news/307860.html

相关文章:

  • robomimic基础教程(三)——自带算法
  • 【Linux】ICMP
  • 【开端】docker基线漏洞修复
  • React-Hooks-Form 集成 Zod 校验库
  • go get -u @latest没有更新依赖模块
  • 如何通过深度学习实践来理解深度学习的核心概念
  • Ubuntu 24.04中安装virtualenv
  • QT + WebAssembly + Vue环境搭建
  • JS面试真题 part4
  • 【Spring框架精讲】进阶指南:企业级Java应用的核心框架(Spring5)
  • NX二次开发—批量导出点工具
  • html限制仅有一个音/视频可播放
  • 阿里云社区领积分自动打卡Selenium IDE脚本
  • How to see if openAI (node js) createModeration response “flagged“ is true
  • 代码随想录算法训练营第五十八天 | 拓扑排序精讲-软件构建
  • Arduino IDE离线配置第三方库文件-ESP32开发板
  • 8.JMeter+Ant(基于工具的实现接口自动化,命令行方式)
  • 常见的限流算法
  • 【C/C++】程序的构建(编译)过程概述
  • 【C++】函数重载
  • Python使用pymysql返回字典类型的数据
  • yum本地源配置
  • 基于 SpringBoot 的车辆充电桩管理系统
  • 医药|基于springboot的医药管理系统设计与实现(附项目源码+论文+数据库)
  • JAVA算法数据结构第一节稀疏矩阵
  • ADB ROOT开启流程
  • C# AutoResetEvent ManualResetEvent Mutex 对比
  • 54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)
  • ip映射域名,一般用于mysql和redis的固定映射,方便快捷打包
  • python基本数据类型简记