Spring Cloud - 服务治理与 Eureka
知识点 2:服务治理与 Eureka
1. 核心理论:服务治理
微服务架构引入了一个新的问题:当一个系统被拆分成很多微服务后,服务 A 如何知道服务 B 的 IP 地址和端口号在哪里?如果服务 B 为了高可用,部署了多个实例,服务 A 又该如何选择调用哪一个(负载均衡)?
这就是服务治理 (Service Governance) 要解决的核心问题。服务治理的基石是服务注册中心 (Service Registry)。
核心流程
- 服务注册 (Register): 每个微服务实例在启动时,都会将自己的网络地址、服务名称、元数据等信息“注册”到服务注册中心。
- 服务发现 (Discover): 当服务 A 需要调用服务 B 时,它不会硬编码服务 B 的地址。相反,它会向服务注册中心“查询”,询问:“服务名叫 B 的服务有哪些可用的实例?”注册中心会返回一个包含所有健康实例的地址列表。
- 心跳续约 (Renew): 每个服务实例会定期向注册中心发送“心跳”(通常是每隔 30 秒),以证明自己还处于活动状态。如果注册中心在一定时间内(默认 90 秒)没有收到某个实例的心跳,就会认为该实例已下线,并将其从服务列表中“剔除”,以防止其他服务调用到已经失效的实例。
Eureka:一个经典的服务注册中心
Eureka 是 Netflix 开源的一款服务注册中心,也是 Spring Cloud 生态中最经典、最常用的组件之一(尽管现在 Nacos 等新组件也很流行)。
它主要由两部分组成:
- Eureka Server (服务端): 提供服务注册和发现的功能。它就像微服务世界的“电话簿”或“通讯录”,集中管理着所有服务实例的信息。
- Eureka Client (客户端): 内嵌在每个微服务中,作为一个依赖库存在。它负责与 Eureka Server 进行交互,处理服务的注册、心跳续约和服务发现等逻辑。
生活比喻:
- Eureka Server: 就像一个手机通讯录。
- 服务启动 (注册): 你买了一部新手机,办了一张新卡,你的朋友会把你的新号码存到他的通讯录里。
- 服务调用 (发现): 当你的朋友想给你打电话时,他会打开通讯录,找到你的名字,然后拨号。
- 心跳续约: 你每个月都按时给手机号交话费,以确保号码不会被注销。
2. 代码示例:搭建一个 Eureka Server
2.1 添加依赖 (pom.xml)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.2 编写主启动类
package com.study.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer // 声明这是一个 Eureka Server
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2.3 编写配置文件 (application.yml)
server:
port: 8761 # Eureka Server 的默认端口
eureka:
instance:
hostname: localhost
client:
# 由于这是一个注册中心,它自己不需要去注册自己
register-with-eureka: false
# 它自己就是注册中心,不需要去检索服务
fetch-registry: false
service-url:
# 设置 Eureka Server 的交互地址,查询服务和注册服务都需要依赖这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 运行与验证: 启动这个 Spring Boot 应用,然后在浏览器中访问
http://localhost:8761。如果你能看到 Eureka 的管理界面,就说明你的服务注册中心已经成功搭建并运行起来了!

浙公网安备 33010602011771号