6366 字
约 21 分钟
1
Eureka 入门详解:一篇搞懂微服务中的服务注册与发现

Eureka 入门详解:一篇搞懂微服务中的服务注册与发现

前言

学习微服务的时候,我们经常会遇到一个词:

注册中心。

例如:

Eureka
Nacos
ZooKeeper
Consul

很多刚接触微服务的开发者会产生疑问:

为什么需要注册中心?

服务不是直接通过 HTTP 调用就可以了吗?

Eureka 到底保存了什么?

服务挂掉以后 Eureka 怎么知道?

Eureka 是不是帮我们转发 HTTP 请求?

Eureka 和 ZooKeeper 又有什么区别?

这篇文章就从这些问题开始,把 Eureka 的核心原理完整串起来。

先记住一句最重要的话:

Eureka 是一个服务注册与发现组件,它帮助微服务解决“服务在哪里,以及哪些服务当前可用”的问题。

Netflix 官方将 Eureka 定义为一个 RESTful 服务,主要用于服务发现、负载均衡和故障转移场景;Spring Cloud Netflix 当前仍然提供 Eureka Client 和 Eureka Server 集成。(GitHub )


一、为什么微服务需要 Eureka?

先不要急着学习 Eureka。

我们先看它到底解决了什么问题。

假设现在有一个非常简单的系统:

Order Service
      |
      ↓
User Service

订单服务需要获取用户信息。

如果 User Service 只有一台服务器:

192.168.1.10:8080

我们完全可以在 Order Service 中写:

http://192.168.1.10:8080/users/10001

甚至配置成:

user-service:
  url: http://192.168.1.10:8080

看起来没什么问题。

但是业务慢慢增长以后,User Service 一台服务器扛不住了。

于是增加到三台:

User Service

192.168.1.10:8080
192.168.1.11:8080
192.168.1.12:8080

这时候问题来了。

Order Service 到底调用谁?

                 ┌→ 192.168.1.10:8080
Order Service ───┼→ 192.168.1.11:8080
                 └→ 192.168.1.12:8080

你当然可以把三个地址全部写进配置文件。

但是新的问题马上又来了。

今天:

192.168.1.10
192.168.1.11
192.168.1.12

明天扩容:

192.168.1.13

后天:

192.168.1.11

服务器挂了。

再过几天:

192.168.1.10

重新部署以后 IP 又变了。

如果每发生一次变化,都人工修改所有消费者配置:

Order Service
Payment Service
Product Service
Marketing Service

整个系统会非常难维护。

所以微服务真正需要解决的问题是:

服务实例的地址是动态变化的,消费者不能依赖写死的 IP。

于是注册中心出现了。


二、Eureka 可以理解成“微服务通讯录”

假设我们增加一个 Eureka Server:

                 Eureka Server
                     |
          ┌──────────┼──────────┐
          ↓          ↓          ↓

      User-1      User-2      User-3

User Service 启动的时候,不再要求 Order Service 提前知道自己的地址。

而是主动告诉 Eureka:

我是:

user-service

我的地址:

192.168.1.10:8080

第二台告诉 Eureka:

user-service

192.168.1.11:8080

第三台:

user-service

192.168.1.12:8080

于是 Eureka 内部维护:

USER-SERVICE

├── 192.168.1.10:8080
├── 192.168.1.11:8080
└── 192.168.1.12:8080

Order Service 再需要调用用户服务时,就不用知道具体 IP 了。

只需要知道:

user-service

然后从 Eureka 获取:

192.168.1.10:8080
192.168.1.11:8080
192.168.1.12:8080

这就是:

服务发现。


三、Eureka 最核心的两个角色

Eureka 里面首先要理解两个角色:

Eureka Server

Eureka Client

1. Eureka Server

Eureka Server 就是:

注册中心服务器。

它主要负责维护:

有哪些服务?

每个服务有哪些实例?

每个实例在哪里?

哪些实例还活着?

例如:

Eureka Registry

USER-SERVICE
├── 10.0.0.1:8080
└── 10.0.0.2:8080

ORDER-SERVICE
├── 10.0.1.1:8081
└── 10.0.1.2:8081

PAYMENT-SERVICE
└── 10.0.2.1:8082

Spring Cloud 官方文档也明确说明,Eureka Server 可以保存注册服务信息,并可通过多个 Server 实例互相同步注册状态来实现更高可用。(Home )


四、Eureka Client 是什么?

微服务应用通常是:

Eureka Client。

例如:

user-service

order-service

payment-service

都可以是 Eureka Client。

一个 Eureka Client 通常可以同时拥有两种身份:

Provider

Consumer

例如:

Order Service

它给别人提供:

创建订单
查询订单
取消订单

所以它是:

Provider

但是 Order Service 又需要调用:

User Service

Product Service

Inventory Service

这时候它又是:

Consumer

因此一个微服务:

既可以向注册中心注册自己,也可以从注册中心发现其他服务。


五、什么叫服务注册?

Service Registration:

服务注册。

假设:

user-service

启动以后地址是:

10.0.0.1:8080

它会向 Eureka Server 发送自己的实例信息。

概念上类似:

serviceName = user-service

ip = 10.0.0.1

port = 8080

除此之外,实际注册信息还可以包含:

Hostname

Port

Health Check URL

Status Page URL

Home Page URL

Metadata

Spring Cloud 官方文档说明,Eureka Client 注册时会提交主机、端口、健康状态 URL、主页等服务元数据。(Home )

于是 Eureka Registry 中出现:

USER-SERVICE
└── 10.0.0.1:8080

第二台启动:

USER-SERVICE
├── 10.0.0.1:8080
└── 10.0.0.2:8080

第三台启动:

USER-SERVICE
├── 10.0.0.1:8080
├── 10.0.0.2:8080
└── 10.0.0.3:8080

这就是:

服务启动
   ↓
告诉 Eureka 自己是谁
   ↓
Eureka 保存实例

也就是:

服务注册。


六、什么叫服务发现?

现在 Order Service 要调用:

user-service

以前需要:

http://10.0.0.1:8080

现在只需要通过服务名称:

USER-SERVICE

去获取实例列表。

Eureka 返回:

10.0.0.1:8080

10.0.0.2:8080

10.0.0.3:8080

消费者获得这些实例以后,就可以选择其中一个进行调用。

这个过程:

Consumer
   ↓
查询注册中心
   ↓
获得 Provider 列表

就是:

Service Discovery,服务发现。


七、Eureka 会不会帮我们转发业务请求?

这是 Eureka 初学者非常容易理解错的地方。

很多人脑子里的架构是:

Order Service
      ↓
   Eureka
      ↓
User Service

认为 HTTP 请求经过 Eureka。

这是错误的。

Eureka 主要帮助消费者:

找到服务地址。

真正业务调用通常仍然是消费者直接调用 Provider。

正确流程:

           ① 服务发现

Order ─────────────→ Eureka
  ↑                     |
  └──── Provider List ──┘


           ② 业务调用

Order ─────────────→ User Service

也就是说:

Eureka

不是:

API Gateway

也不是:

Reverse Proxy

它不是帮你转发每一次业务请求。

它主要是一个:

Service Registry

服务注册表。


八、为什么不能每次调用都去问 Eureka?

假设一个接口 QPS 为:

10000

如果每一次请求都这样:

Order Service
      ↓
Eureka:User Service 在哪里?
      ↓
返回 IP
      ↓
再调用 User Service

那意味着 Eureka 一秒可能被查询:

10000 次

如果几十个微服务全部这样干,注册中心本身马上成为系统瓶颈。

所以 Eureka Client 会维护:

本地服务注册信息缓存。

Spring Cloud 官方文档明确说明,Eureka 客户端在内存中缓存注册信息,因此不需要在每次服务调用时访问注册中心。(Home )

结构变成:

                  Eureka
                     |
                     | 拉取注册表
                     ↓
              Order Service
                     |
              Local Registry
                     |
         ┌───────────┼───────────┐
         ↓           ↓           ↓

       User1        User2       User3

Order Service 本地可能已经知道:

USER-SERVICE

10.0.0.1:8080
10.0.0.2:8080
10.0.0.3:8080

真正发生请求时:

Order
  ↓
读取本地服务实例列表
  ↓
选择一个 Provider
  ↓
直接调用

这也是为什么:

Eureka Server 短时间不可用,不一定意味着所有已有服务调用立刻全部失败。

因为客户端可能仍然保存着之前的服务实例信息。


九、那么到底调用哪一台 User Service?

假设 Eureka 告诉 Order:

USER-SERVICE

A = 10.0.0.1:8080

B = 10.0.0.2:8080

C = 10.0.0.3:8080

Order Service 不可能永远只调用 A。

否则:

A:CPU 100%

B:摸鱼

C:摸鱼

所以需要:

Load Balancing,负载均衡。

例如:

第 1 个请求 → A

第 2 个请求 → B

第 3 个请求 → C

第 4 个请求 → A

这种就叫:

Round Robin
轮询

还有:

Random
随机

Weight
权重

Least Connections
最少连接

Consistent Hash
一致性哈希

等等。

需要明确:

Eureka 主要解决服务注册与发现;客户端负载均衡则由对应客户端/负载均衡组件处理。

现代 Spring Cloud 可以通过 Spring Cloud LoadBalancer 使用 Eureka 提供的逻辑服务名称和实例信息。(Home )


十、Eureka 怎么知道服务还活着?

现在最关键的问题来了。

假设 Eureka 保存:

USER-SERVICE

10.0.0.1
10.0.0.2
10.0.0.3

突然:

10.0.0.2

服务器宕机。

Eureka 怎么知道?

答案就是:

Heartbeat

也就是:

心跳。


十一、什么叫 Eureka 心跳?

User Service 注册完成以后,不是:

注册一次
↓
永远不管

而是定期告诉 Eureka:

我还活着。

比如:

User Service
     |
     | Heartbeat
     ↓
Eureka

过一段时间:

User Service
     |
     | Heartbeat
     ↓
Eureka

继续:

我还活着。

这个过程叫:

Renew

也就是:

服务续约。

Spring Cloud 当前官方文档说明,Eureka 实例通过周期性心跳维持注册,默认续约周期为 30 秒,并且生产环境通常建议保留这个默认周期。(Home )

因此可以这样理解:

Register
   ↓
注册一次

Renew
   ↓
不断证明自己还活着

十二、如果服务直接宕机怎么办?

如果 User Service 正常关闭,可以主动告诉 Eureka:

我要下线了。

但是现实中经常不是正常关闭。

而是:

服务器断电

进程被 kill

JVM 崩溃

机器宕机

网络故障

这时候 User Service 根本没有机会主动说:

我要下线。

但是有一个现象非常明显:

它不再发送心跳。

于是 Eureka 发现:

这个实例已经很长时间没有续约了。

最终就可以把它从注册信息中剔除。

这个过程叫:

Eviction

也就是:

服务剔除。

于是:

原来:

USER-SERVICE
├── A
├── B
└── C

B 挂了以后:

USER-SERVICE
├── A
└── C

消费者再更新本地实例列表,就不会继续把 B 当作正常实例使用。


十三、Eureka 的完整生命周期

到这里,我们可以把整个 Eureka 流程总结成:

Register
   ↓
注册

Renew
   ↓
续约 / 心跳

Fetch Registry
   ↓
获取注册表

Cancel / Evict
   ↓
主动下线 / 被剔除

整个过程:

服务启动
   ↓
向 Eureka 注册
   ↓
Eureka 保存实例
   ↓
服务持续发送心跳
   ↓
Consumer 拉取服务列表
   ↓
缓存到本地
   ↓
负载均衡选择实例
   ↓
直接调用 Provider

如果服务挂了:

Provider 宕机
   ↓
无法继续发送心跳
   ↓
Eureka 判断实例失效
   ↓
剔除实例
   ↓
Consumer 注册表逐渐更新
   ↓
不再选择该实例

这就是 Eureka 最核心的原理。


十四、什么是 Eureka 自我保护机制?

这是 Eureka 中一个非常经典的概念:

Self Preservation

也就是:

自我保护。

假设公司有:

100 个微服务实例

突然某一分钟:

80 个实例都没有心跳

有两种可能。

第一种:

80 台服务器同时炸了

第二种:

Eureka 和服务之间的网络出了问题

第二种实际上完全有可能。

比如:

机房网络故障

交换机异常

网络分区

大面积丢包

如果 Eureka 采取非常激进的策略:

没收到心跳
   ↓
马上全部删除

就有可能出现:

服务实际上还活着
   ↓
只是 Eureka 联系不到
   ↓
Eureka 全部删掉
   ↓
消费者认为服务全部不存在

于是原本只是:

局部网络问题

可能扩大成:

整个微服务体系服务发现异常

因此 Eureka 的设计思想更倾向:

当异常规模很大时,需要考虑是不是网络本身出了问题,而不是立刻认为所有实例都死亡。

这就是 Eureka 自我保护思想的核心。


十五、Eureka 为什么更强调可用性?

这和分布式系统中的 CAP 有关系。

CAP:

C = Consistency
一致性

A = Availability
可用性

P = Partition Tolerance
分区容错性

网络分区无法完全避免。

所以系统经常需要在:

更强一致性

和:

更强可用性

之间进行权衡。

Eureka 的设计明显更加重视:

Availability

也就是说:

即使注册信息暂时没有达到绝对实时一致,也希望系统还能继续提供服务。

因此 Eureka 会使用:

客户端缓存

心跳

注册表缓存

Server Peer

自我保护思想

等机制提高整体可用性。


十六、Eureka Server 本身挂了怎么办?

如果全公司只有一台 Eureka:

Eureka Server

那么它本身就可能成为单点。

所以生产环境一般应该考虑:

Eureka Server Cluster

例如:

         Eureka-1
          ↙    ↘
         ↕      ↕
   Eureka-2 ←→ Eureka-3

多个 Eureka Server 可以成为 Peer,互相同步注册信息。Spring Cloud 官方文档仍然支持 Peer-aware Eureka Server 部署,并说明多个 Peer 可以同步服务注册信息。(Home )

于是:

Eureka-1 挂了

客户端还可以访问:

Eureka-2

Eureka-3

提高注册中心本身的可用性。


十七、使用 Spring Cloud 搭建 Eureka Server

在 Spring Cloud 中,Eureka Server 的核心依赖是:

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

当前 Spring Cloud Netflix 官方文档仍然提供该 Starter,并通过 @EnableEurekaServer 创建 Eureka Server。(Home )

启动类:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

配置示意:

server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8761/eureka/

这里:

register-with-eureka: false

表示:

当前这个单机 Eureka Server 不需要把自己注册给自己。

而:

fetch-registry: false

表示:

当前单机 Server 不需要像普通 Client 一样获取注册表。

Spring Cloud 官方单机配置示例也使用了这两个配置。(Home )

启动以后:

http://localhost:8761

通常可以进入 Eureka 管理页面。


十八、创建 Eureka Client

例如:

user-service

加入依赖:

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

配置:

spring:
  application:
    name: user-service

server:
  port: 8080

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

这里最重要的是:

spring:
  application:
    name: user-service

它基本上就相当于:

这个服务叫什么名字。

Spring Cloud 官方文档说明,默认的 Eureka service ID 就来自 spring.application.name;当前 Spring Cloud 只要 Eureka Client Starter 在 classpath 中并配置了 Eureka Server 地址,应用即可自动注册,不需要为了注册额外添加老教程里常见的 Eureka Client 启用注解。(Home )


十九、多个实例是什么效果?

启动:

user-service
port = 8081

再启动:

user-service
port = 8082

再启动:

user-service
port = 8083

Eureka 中最终可以理解成:

USER-SERVICE

├── localhost:8081
├── localhost:8082
└── localhost:8083

注意:

服务名称相同,不代表只有一个实例。

这是微服务非常重要的概念:

Service
    ↓
Instances

例如:

user-service

是逻辑服务。

而:

10.0.0.1:8080
10.0.0.2:8080
10.0.0.3:8080

才是三个真实服务实例。


二十、Eureka 和 Feign 是什么关系?

这个也非常容易混。

Eureka 负责:

找到 User Service 在哪里。

Feign 负责:

把 HTTP 调用写得像 Java 接口调用。

例如:

@FeignClient(name = "user-service")
public interface UserClient {

    @GetMapping("/users/{id}")
    UserVO getUser(@PathVariable Long id);
}

Order Service:

@Autowired
private UserClient userClient;

然后:

UserVO user = userClient.getUser(10001L);

表面上只是:

userClient.getUser()

背后可以理解成:

Feign
   ↓
发现逻辑服务 user-service
   ↓
获取可用实例
   ↓
LoadBalancer
   ↓
选择实例
   ↓
HTTP 请求

所以:

Eureka

解决:

服务在哪里。

而:

Feign

解决:

怎么方便地调用 HTTP 服务。


二十一、Eureka 和 LoadBalancer 的关系

假设 Eureka 返回:

USER-SERVICE

A
B
C

到底选择谁:

A?

B?

C?

需要:

LoadBalancer

所以完整关系可以理解成:

Feign
  ↓
我要调用 user-service
  ↓
Service Discovery
  ↓
得到 A / B / C
  ↓
LoadBalancer
  ↓
选择 B
  ↓
HTTP
  ↓
User Service B

现代 Spring Cloud 官方文档将 Eureka 与 Spring Cloud LoadBalancer 集成,而不是简单按照很多老教程中的 Ribbon 体系来理解。(Home )


二十二、Eureka 和 API Gateway 有什么区别?

Eureka:

服务注册
服务发现

Gateway:

外部请求入口
路由
认证
鉴权
限流
过滤

完整架构可能是:

                   Client
                     |
                     ↓
               API Gateway
                     |
            ┌────────┼────────┐
            ↓        ↓        ↓
          User     Order    Payment
                     ↑
                     |
                  Eureka

Gateway 本身也可以通过:

Eureka

发现后面的微服务。

所以:

Eureka

不是网关。


二十三、Eureka 和 ZooKeeper 有什么区别?

你前面如果已经学过 ZooKeeper,这里非常适合进行对比。

ZooKeeper:

本质:
分布式协调系统

它拥有:

ZNode
Session
Watcher
Ephemeral Node
Sequential Node

可以做:

服务注册发现
分布式锁
Leader Election
分布式协调

而 Eureka 更专注于:

服务注册
服务发现

两者服务存活判断方式也不一样

ZooKeeper 经典思路:

Provider
   ↓
Ephemeral Node
   ↓
Session 存在
节点存在
   ↓
Session Expired
节点删除

Eureka:

Provider
   ↓
Register
   ↓
Heartbeat
   ↓
Renew
   ↓
长时间没有续约
   ↓
Evict

所以可以粗略记成:

ZooKeeper

Session
+
临时节点
+
Watcher

而:

Eureka

Register
+
Heartbeat
+
Registry Cache
+
Eviction

二十四、Eureka 和 ZooKeeper 对比表

对比项 Eureka ZooKeeper
定位 服务注册发现 分布式协调系统
注册中心 核心用途之一 可以实现
服务存活 心跳续约 Session + 临时节点
服务列表 Client 拉取并缓存 ZNode + Watch
分布式锁 不是主要用途 可以实现
Leader Election 不是主要用途 可以实现
微服务生态 Spring Cloud Netflix Dubbo 等体系中很经典
核心思想 服务可用性 分布式协调与一致性

二十五、Eureka 和 Nacos 又是什么关系?

它们都可以作为:

注册中心

所以:

Eureka
Nacos
ZooKeeper
Consul

在某些架构图中会出现在同一层:

             Registry

     ┌──────────┼──────────┐
     ↓          ↓          ↓

   Eureka     Nacos    ZooKeeper

但是 Nacos 除了:

服务注册发现

还非常常见地承担:

配置中心

因此在国内 Java 微服务项目中经常看到:

Spring Cloud Alibaba
        +
      Nacos

而 Eureka 是:

Spring Cloud Netflix
        +
      Eureka

的经典组合。


二十六、Eureka 中几个必须掌握的关键词

学习 Eureka 不需要第一天把所有配置全部背下来。

先把下面几个词吃透。

Register

注册

服务告诉 Eureka:

我是谁,我在哪里。


Renew

续约 / 心跳

服务告诉 Eureka:

我还活着。


Fetch Registry

拉取注册表

Consumer 获取:

当前有哪些服务实例。


Cancel

主动下线

服务正常关闭:

我要离开了。


Evict

剔除

服务长时间没有正常续约:

注册中心将失效实例从服务列表中清理。


Self Preservation

自我保护

异常情况下避免过度删除大量可能仍然存活的服务实例。


Local Cache

客户端缓存

消费者不会每一次业务请求都访问 Eureka。


二十七、从启动到调用完整模拟一次

假设现在启动:

Eureka Server

然后启动:

user-service-1
10.0.0.1:8080

第一步:

User1
  ↓
Register
  ↓
Eureka

然后:

USER-SERVICE

10.0.0.1:8080

再启动:

user-service-2
10.0.0.2:8080

变成:

USER-SERVICE

10.0.0.1:8080
10.0.0.2:8080

然后启动:

order-service

Order 也注册:

ORDER-SERVICE

10.0.1.1:8081

同时 Order 获取 Eureka 注册表:

USER-SERVICE:

A
B

并缓存到本地。


现在用户创建订单。

Order 需要查询 User:

Order
  ↓
我要调用 user-service
  ↓
发现 A / B
  ↓
LoadBalancer
  ↓
选择 B
  ↓
直接 HTTP 请求
  ↓
User B

整个业务 HTTP 请求:

不经过 Eureka。


现在 User B 宕机。

User B
  ↓
无法发送 Heartbeat

Eureka 最终认为:

B 不可用了。

把 B 剔除。

注册表变成:

USER-SERVICE

A

客户端的服务列表随后也逐渐更新。

之后:

Order
  ↓
User A

不会继续把 B 当作正常实例选择。

这就是 Eureka 服务注册与发现的完整生命周期。


二十八、为什么微服务需要注册中心?

现在回到最开始的问题。

如果没有 Eureka:

Order Service
     ↓
写死 IP
     ↓
User Service

带来的问题:

扩容要改配置

缩容要改配置

服务器挂了不知道

IP 改了要重新配置

大量服务之间地址维护困难

有 Eureka:

Provider
    ↓
动态注册
    ↓
 Eureka
    ↓
动态发现
    ↓
Consumer

所以服务实例可以:

上线
下线
扩容
缩容
迁移
重启

而消费者不需要把某一个固定 IP 当作永久依赖。

这才是:

注册中心真正解决的问题。


二十九、现在还值得学习 Eureka 吗?

值得。

但需要把:

“学习 Eureka”

和:

“新项目必须选择 Eureka”

分开。

截至 2026 年 9 月,Spring Cloud Netflix 官方文档仍然把 Eureka 作为 Service Discovery 能力提供,当前文档列有稳定版本 5.0.2,因此 Eureka 并不是一个“完全不能使用”的历史概念。(Home )

不过学习 Eureka 更大的价值其实是理解:

服务注册

服务发现

心跳

服务剔除

客户端缓存

负载均衡

注册中心高可用

因为以后即使换成:

Nacos
Consul
ZooKeeper
Kubernetes Service Discovery

核心问题仍然是:

在动态分布式环境中,消费者如何找到可用的 Provider?

所以学 Eureka,本质是在学习:

服务发现模型。


三十、Eureka 知识体系最终应该怎么记?

不要死记几十个配置项。

脑子里建立下面这张图:

                    Eureka Server
                 Service Registry
                /                \
               /                  \
       Register / Renew        Fetch Registry
             /                      \
            ↓                        ↓
     ┌──────────────┐        ┌──────────────┐
     │ User Service │        │Order Service │
     │   Provider   │        │   Consumer   │
     └──────┬───────┘        └───────┬──────┘
            │                         │
            │                         │
            └──────── HTTP ───────────┘
                直接业务调用

Provider:

启动
 ↓
Register
 ↓
定期 Renew

Consumer:

Fetch Registry
 ↓
本地缓存
 ↓
LoadBalancer
 ↓
选择 Provider
 ↓
直接调用

Provider 挂掉:

心跳消失
 ↓
实例失效
 ↓
Evict
 ↓
Consumer 服务列表更新

这就是整个 Eureka。


三十一、一句话总结

如果面试官问:

Eureka 是什么?

可以回答:

Eureka 是 Netflix 开源的服务注册与发现组件。在微服务环境中,Provider 启动后将服务名称、IP、端口和相关元数据注册到 Eureka Server,并通过周期性心跳维持服务实例状态;Consumer 从 Eureka 获取并在本地缓存服务实例列表,通过负载均衡选择可用 Provider,再直接发起业务调用。当实例长时间无法续约时,注册中心会将其从服务列表中剔除。

如果要用一句大白话:

Eureka 就是微服务里的动态通讯录,它负责记录“谁提供什么服务、服务在哪里、谁目前还活着”。

再压缩成六个关键词:

Eureka

=
注册
+
心跳
+
发现
+
缓存
+
负载均衡配合
+
服务剔除

而整个微服务调用链最终可以记成:

微服务拆分
    ↓
IP 动态变化
    ↓
需要注册中心
    ↓
Eureka
    ↓
Provider 注册
    ↓
Consumer 发现
    ↓
本地缓存实例
    ↓
负载均衡
    ↓
直接调用 Provider

理解到这里,Eureka 就算真正入门了。

接下来再学习:

Feign
LoadBalancer
Gateway
Hystrix / Circuit Breaker
Config
Nacos

就会发现它们并不是一堆毫无关系的组件,而是在共同解决:

一个大型单体系统被拆成大量微服务以后,这些服务应该怎样寻找彼此、调用彼此、保护彼此和管理彼此。

Eureka 入门详解:一篇搞懂微服务中的服务注册与发现
http://clxhxhhr.top/posts/557/
作者
clxstart
发布于
2026-09-09
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。
文章目录
目录