服务注册与发现的详细概述和核心功能请参考上篇博客:https://blog.youkuaiyun.com/Simba_2/article/details/155570100?spm=1011.2124.3001.6209
一、Eureka 详解
Eureka 是 Netflix 开源的服务注册与发现组件,基于 REST 通信,采用客户端-服务器架构。其设计遵循 AP 原则,在网络分区发生时优先保障系统的可用性,允许存在短时的数据不一致。另外客户端-服务器架构对应两类角色,如下:
- Eureka Server:作为服务注册中心,负责记录服务信息和心跳监控。
- Eureka Client:内嵌于各个微服务中,负责服务注册、服务续约与失效剔除、服务发现。
①Provider:服务提供者
注册自己的信息到EurekaServer;
每隔30秒向EurekaServer发送心跳;
②Consumer:服务消费者
根据服务名称从EurekaServer拉职服务列表;
基于服务列表做负载均衡,选中一个微服务后发起远程调用;
Server 与 Client 之间通过 REST API 进行通信,数据默认以 JSON 格式传输。

二、核心功能
1. 服务注册
微服务实例在启动时,自动向 Eureka Server 发送其元数据(包括服务名、IP地址、端口及健康状态等)进行注册,宣告自身可被调用。
2. 服务续约与失效剔除
注册后,客户端每30秒向 Server 发送一次心跳以维持租约;若Server在90秒(三个心跳周期)内未收到续约,则会判定该实例失效,并将其从注册列表中安全剔除,完成服务下线的闭环。
3. 服务发现
客户端会定期(默认30秒) 从 Server 拉取并全量缓存服务注册表;当需要调用其他服务时,直接通过服务名从本地缓存中查询实时的、健康的实例列表,实现解耦的透明调用。
4. 自我保护机制
这是 Eureka 的关键容错特性。当短时间内丢失大量客户端心跳(通常因网络分区),Eureka 会进入保护模式,暂停剔除所有疑似失效的实例。这有效防止了因短暂网络波动而导致的服务被大规模误删,优先保障了注册信息的可用性。
5. 多区域部署
支持将服务实例按逻辑或物理位置划分为不同的区域。客户端可配置调用策略,优先路由至同区域的服务,以实现就近访问、降低延迟,并为跨区域的容灾部署提供基础。
三、Eureka使用步骤
1. 搭建注册中心 EurekaServer
①引入eureka-server依赖

②添加@EnableEurekaServer注解

③在application.yml中配置eureka地址

2. 服务注册 Provider
①引入eureka-client依赖

②在application.yml中配置eureka地址

③提供者提供API 接口

3. 服务发现 Consumer
①引入eureka-client依赖(同上)
②在application.yml中配置eureka地址(同上)
③给RestTemplate添加@LoadBalanced注解

④消费者远程调用提供者的服务

四、调用过程注意事项
- 客户端需配置正确的 eureka.client.serviceUrl.defaultZone,指向可用的 Eureka Server 地址。
- 服务消费者应实现负载均衡策略(如 Ribbon),避免单点调用故障。
- 高并发场景下建议调整客户端缓存刷新间隔(eureka.client.registryFetchIntervalSeconds)。
- 生产环境建议部署至少两个 Eureka Server 实例,组成集群互相注册以实现高可用。
- 服务下线时应主动调用 shutdown 方法,避免服务残留问题。
五、Eureka与nacos对比
1. 共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
2.区别
| 特性 | Eureka | Nacos |
|---|---|---|
| 一致性模型 | AP,高可用优先 | AP + CP,可切换,更灵活 |
| 功能范围 | 服务注册与发现 | 服务注册发现、动态配置、元数据管理 |
| 健康检查 | 客户端心跳,时效慢(~90秒) | TCP/HTTP/心跳,时效快(秒级) |
| 易用性与生态 | 与Spring Cloud Netflix集成深,但已停更 | 与Spring Cloud Alibaba集成,生态活跃,持续更新 |
1947

被折叠的 条评论
为什么被折叠?



