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

SpringCloud之Eureka基础认识-服务注册中心

0、认识Eureka

Eureka 是 Netflix 开源的服务发现组件,后来被集成到 Spring Cloud 生态中,成为 Spring Cloud Netflix 的核心模块之一。它主要用于解决分布式系统中​​服务注册与发现​​的问题。

  1. Eureka Server 有必要的话,也可以做成集群

  2. Eureka 包含两个组件∶Eureka ServerEureka Client(服务提供端(Provider)​​和​​服务消费端(Consumer)

  3. Eureka Server 提供注册服务, 各个微服务节点通过配置启动后,会在 Eureka Server 中进行注册,这样 EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

  4. EurekaClient 通过注册中心进行访问, 是一个 Java 客户端,用于简化 Eureka Server 的交互,客户端同时也具备一个内置的、使用轮询(round-robin) 负载算法的负载均衡器。在应 用启动后,将会向 Eureka Server 发送心跳(默认周期为 30 秒)。如果 Eureka Server 在多个心跳周期内没有接收到某个节点的心跳,EurekaServer 将会从服务注册表中把这个服务节点移除(默认 90 秒)

1、如何创建Eureka

 1.建议单独的创建一个模块,然后配置yaml文件

server:port: 9001#配置eureka-server
eureka:instance:hostname: eureka9001.com #服务实例名client:#配置不向注册中心注册自己register-with-eureka: false#表示自己就是注册中心,作用就是维护注册服务实例, 不需要去检索服务fetch-registry: falseservice-url:#设置与eureka server 交互模块, 查询服务和注册服务都需要依赖这个地址#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/#相互注册,这里应该注册到eureka server9002defaultZone: http://eureka9002.com:9002/eureka/
#  server:
#    #禁用自我保护模式
#    enable-self-preservation: false
#    #设置超时时间为2秒,在2秒钟,收不到心跳包,就认为是超时
#    eviction-interval-timer-in-ms: 2000

第二步再启动代码中加入注解,@EnableEurekaServer 表示该程序作为 EurekaServer

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

当然,必不可少的pom依赖

<dependencies><!--引入eureka-server 场景启动器starter: 使用版本仲裁--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
</dependencies>

完成后可以访问http://localhost:9001查看仪表盘

2、将服务提供端和服务消费端作为Eureka Client注册到Eureka Server

老规矩引入依赖,消费端和提供端都要

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

修改Client的yaml文件和启动类

provider:

#配置eureka-client
eureka:client:register-with-eureka: true #将自己注册到Eureka-Server#表示从Eureka-Server 抓取注册信息#如果是单节点,是可以不配置的,但是如果是一个集群,则必须配置true,#才能配合Ribbon使用负载均衡fetch-registry: trueservice-url:#表示将自己注册到哪个eureka-server#将本微服务注册到多个eureka-server ,使用逗号间隔即可defaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka
#  instance:
#    #客户端向服务端发送心跳的时间间隔 1s(默认是30)
#    lease-renewal-interval-in-seconds: 1
#    #服务端收到最后一次心跳后等待的时间上限
#    #时间单位(秒),默认是90s, 超时将剔除服务
#    lease-expiration-duration-in-seconds: 2

 @EnableEurekaClient 将程序标识为eureka client

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

consume:

#配置eureka-client
eureka:client:register-with-eureka: true #将自己注册到Eureka-Serverfetch-registry: trueservice-url:#表示将自己注册到哪个eureka-server#这里我们将本微服务注册到EurekaServer 集群,使用逗号间隔#defaultZone: http://localhost:9001/eurekadefaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka

@EnableEurekaClient 将程序标识为eureka client

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

启动之后可以访问http://localhost:9001查看,昵称是yaml文件中的昵称 

3.Service Consumer Service Provider EurekaServer 的维护机制

三者的协同流程​

  1. ​服务注册​​:
    Provider(MEMBER-SERVICE:10000)启动 → 向 Eureka Server(9001)注册
  2. ​服务发现​​:
    Consumer(80端口应用)需要调用服务时 → 从 Server 获取 Provider 地址
  3. ​服务调用​​:
    Consumer 通过 HTTP Client(如RestTemplate/Feign)访问 Provider
  4. ​状态维护​​:
    • Provider 持续发送心跳
    • Server 定时清理失效实例
    • Consumer 定期更新服务列表

Eureka Server(注册中心)​

  • ​核心职责​
    • 维护所有服务的注册信息(服务名 → 调用地址的映射)
    • 提供服务的注册、发现、续约和剔除功能
  • ​关键机制​
    • ​服务注册表​​:存储服务提供者的元数据(IP、端口、健康状态等)
    • ​心跳机制​​:通过 Provider 的定期心跳(默认30秒)判断服务存活,超时(默认90秒)自动剔除失效实例
    • ​自我保护模式​​:当超过85%实例心跳丢失时,暂停剔除操作,防止网络分区导致误删
    • 定期清理任务​​:默认每60秒检查并清理过期实例

Service Provider(服务提供方)​

  • ​核心职责​
    • 向 Eureka Server 注册自身服务信息
    • 维持服务的可用状态
  • ​关键机制​
    • ​启动注册​​:启动时提交注册请求(包含服务名、IP、端口等),详情参考yaml文件

 Service Consumer(服务消费方)​

  • ​核心职责​
    • 从 Eureka Server 获取服务提供者地址
    • 发起远程调用(如HTTP/RPC)
  • ​关键机制​
    • ​服务发现​​:
      • 通过服务别名在 Eureka Server 查询获取真实调用地址,获取实际的RPC(Remote Procedure Call  远程过程调用)远程地址,实际上是HttpClient技术实现(通过RestTemplate实现的“RPC”本质是​​HTTP REST调用​​,底层依赖HTTPClient)
      • 默认每30秒更新一次远程调用地址,提高分布式系统可用性
    • ​本地缓存​​:将服务地址缓存到JVM内存,避免每次调用都访问 Server,直接去访问provider端
    • ​负载均衡​​:结合Ribbon等组件从多个Provider实例中选择一个(如轮询、权重)
    • ​故障恢复​​:调用失败时自动重试或切换其他实例

 4.自我保护模式

  • 默认情况下EurekaClient定时向EurekaServer端发送心跳包
  • 如果Eureka在server端在一定时间内(默认90秒)没有收到EurekaClient发送心跳包,便会直接从服务册列表中剔除该服务
  • 如果Eureka 开启了自我保护模式/机制, 那么在短时间(90秒中)内丢失了大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务(该现象可能出现在如果网络不通或者阻塞) 因为客户端还能正常发送心跳,只是网络延迟问题,而保护机制是为了解决此问题而产生的
  1. 自我保护是 属于 CAP 里面的 AP 分支, 保证高可用和分区容错性
  2. 自我保护模式是—种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何健康的微服务(容忍你一段时间不心跳) 。 使 用 自 我 保 护 模 式 , 可 以 让 Eureka 集 群 更 加 的 健 壮 、 稳 定 。 参 考 :https://blog.csdn.net/wangliangluang/article/details/120626014

在Eureka Server的yaml文件中添加

  server:#禁用自我保护模式enable-self-preservation: false #默认是true#设置超时时间为2秒,在2秒钟,收不到心跳包,就认为是超时eviction-interval-timer-in-ms: 2000

provider:

eureka:instance:#客户端向服务端发送心跳的时间间隔 1s(默认是30)lease-renewal-interval-in-seconds: 1#服务端收到最后一次心跳后等待的时间上限#时间单位(秒),默认是90s, 超时将剔除服务lease-expiration-duration-in-seconds: 3

解释一下:设置这个eviction-interval-timer-in-ms: 2000和设置lease-expiration-duration-in-seconds: 3 的意思就是等待3秒,如果3秒没有发送心跳就标记为超时,与此同时,Eureka server端每隔两秒就在删除超时的服务 

出现红字,代表自我保护机制已经出现了 

相关文章:

  • 一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨
  • 第十七次博客打卡
  • MySQL 从入门到精通(六):视图全面详解 —— 虚拟表的灵活运用
  • vue开发用户注册功能
  • JVM 数据区域
  • 微服务6大拆分原则
  • Linux 下 Java 部署环境搭建与项目部署详细步骤
  • PyTorch 线性回归模型构建与神经网络基础要点解析
  • 【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路
  • 十六、统一建模语言 UML
  • cdn 是什么?
  • AIGC时代大模型幻觉问题深度治理:技术体系、工程实践与未来演进
  • LSP里氏替换原则
  • 全息美AISEO引领未来智能营销新趋势
  • 关键点检测--使用YOLOv8对Leeds Sports Pose(LSP)关键点检测
  • Kubernetes生产实战(十六):集群安全加固全攻略
  • 协议路由与路由协议
  • 数据库索引详解:原理 · 类型 · 使用 · 优化
  • 流式数据(Streaming Data)和非流式数据(Batch Data)区别、使用场景、优化-来自前端的浅解
  • Python常见面试题
  • 兵韬志略|美2026国防预算未达1万亿,但仍寻求“暗度陈仓”
  • 欧盟公布关税反制清单,瞄准美国飞机、汽车等产品
  • 高盛上调A股未来12个月目标点位,沪深300指数潜在回报15%
  • 《2025城市青年旅行消费报告》发布,解码青年出行特征
  • 降准又降息!央行发布3类10项措施
  • 澎湃读报丨央媒头版五四青年节集中刊文:以青春之我,赴时代之约