☰
SpringCloud-Eureka 第 13 章:注册中心 客户端 —— 实现与设计图解
2026/9/26 4:03:44 网站建设 项目流程

第 13 章:注册中心 & 客户端 —— 实现与设计图解 🖼️

本章目标:用图把「注册中心(Server)」和「客户端(Client)」怎么实现、怎么连、怎么选,一次讲透。
图用 Mermaid 画(GitHub / VS Code 预览可直接渲染)。看不到图时,每张图下方都有 ASCII 备用版。


13.1 先看一张总览图

一个通讯录(Server)+ 若干客户端(每个业务服务)。客户端启动时登记自己,调用别人时先查地址,再直接调。

注册中心(只需 1 套)

①注册 / ②心跳

①注册 / ②心跳

③拉取名单

③拉取名单

④真正调用(不经过 Server)

Eureka Server
:8761
保存:服务名 → 地址列表

service-a
:8080
(Provider + Consumer)

service-b
:8081
(Provider + Consumer)

ASCII 备用版:

┌──────────────────────────┐ │ Eureka Server :8761 │ 通讯录(1 套就够) │ 服务名 → 地址列表 │ └──▲───▲──────────▲───▲────┘ ①注册②心跳│ │③拉名单 │ │ ┌──────┘ └───┐ ┌──┘ └──────┐ ┌────┴─────┐ ┌────┴──┴────┐ │ service-a│◄──④真正调用────►│ service-b │ │ :8080 │ (不经过 Server) │ :8081 │ └──────────┘ └───────────┘

核心记忆点:注册/心跳/拉名单都跟 Server 打交道;真正的业务调用是客户端之间直连,不经过 Server。


13.2 启动顺序(时序图)

谁先启动、每一步发生什么,一图看懂。

service-b(:8081)service-a(:8080)Eureka Server(:8761)service-b(:8081)service-a(:8080)Eureka Server(:8761)1. 先启动注册中心(空名单)loop[每 30 秒]2. 启动并注册 (name=service-a, ip:8080)3. 启动并注册 (name=service-b, ip:8081)心跳 renew(我还活着)心跳 renew(我还活着)4. 查询 "service-b 在哪?"返回 service-b 的地址列表5. 直连调用 /api/hello返回结果

ASCII 备用版:

Server 先起 → A 注册 → B 注册 → A/B 定时心跳 → A 问 Server:service-b 在哪? → Server 给地址 → A 直接调 B → B 返回

13.3 怎么实现「注册中心(Server)」

三步:引 server jar → 加@EnableEurekaServer→ 配置。

依赖(注意是-server)

implementation'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

启动类

@SpringBootApplication@EnableEurekaServer// ← 这个注解让它变成注册中心publicclassEurekaServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EurekaServerApplication.class,args);}}

配置application.yml

server:port:8761eureka:client:register-with-eureka:false# 我是总台,不登记自己fetch-registry:false# 也不需要拉别人的名单server:enable-self-preservation:true# 自我保护(生产建议开,开发可关)

启动后访问http://localhost:8761看到 Dashboard 即成功。


13.4 怎么实现「客户端(Client)」

三步:引 client jar → (可选注解)→ 配defaultZone指向 Server。

依赖(注意是-client)

implementation'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'// 如果要用服务名调用,加上 OpenFeignimplementation'org.springframework.cloud:spring-cloud-starter-openfeign'

启动类

@SpringBootApplication@EnableFeignClients// 用 Feign 才需要;只注册不需要publicclassServiceAApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ServiceAApplication.class,args);}}

配置application.yml(关键在defaultZone)

spring:application:name:service-a# 我登记的名字(别人用它找我)eureka:client:service-url:defaultZone:http://localhost:8761/eureka/# ← 指向注册中心

用「服务名」调用对方(不写 IP)

@FeignClient(name="service-b")// 写对方的 spring.application.namepublicinterfaceServiceBClient{@GetMapping("/api/hello")Stringhello();}

13.5 Server vs Client 对比(别搞混)

业务服务 Client

jar: eureka-**client**

注解: 可选 / @EnableFeignClients

配置: defaultZone 指向 Server

注册中心 Server

jar: eureka-**server**

注解: @EnableEurekaServer

配置: register/fetch = false

维度注册中心 Server业务服务 Client
依赖...eureka-server...eureka-client(+openfeign)
注解@EnableEurekaServer一般不用 /@EnableFeignClients
关键配置register-with-eureka=falsedefaultZone指向 Server
角色被查询的「通讯录」主动登记 + 查询的「用户」

13.6 怎么设计 / 怎么选(决策图)

要不要用注册中心?

只有 2~3 个,地址固定

会增长/要负载均衡

开发/内网,能容忍

生产,不能宕

服务数量多吗?
会扩容/多实例吗?

直接写死地址即可
(URL 配置),不必上 Eureka

注册中心自己
能容忍宕机吗?

单个 Eureka Server 即可

Eureka Server 集群
(2~3 个互相注册)

选型对照(2026 视角)

是

否 / 已用 Spring Cloud Netflix

新项目?

优先 Nacos / Consul
(功能更全,活跃)

Eureka 仍可用
(简单稳定,维护中)

方案适合场景说明
写死地址服务极少、地址固定最省事,无自动发现/负载均衡
单 Eureka Server学习 / 内网 / 开发简单,但单点故障
Eureka 集群生产、高可用Server 互相注册,互为备份
Nacos / Consul新项目、需配置中心注册+配置一体,社区更活跃

详见第08章-高可用集群.md(集群)与第11章-2026选型提醒.md(选型)。


13.7 高可用:注册中心集群长啥样

多个 Server互相注册、互为副本;客户端defaultZone填多个地址。

互相注册,同步名单

Eureka Server 1
:8761

Eureka Server 2
:8762

service-a

service-b

客户端配置(填多个,逗号分隔):

eureka:client:service-url:defaultZone:http://host1:8761/eureka/,http://host2:8762/eureka/

注意:是「同一个注册中心的多个副本」,不是给每个业务服务各配一个注册中心。


13.8 本章小结

  • 一张总览图记牢:注册/心跳/拉名单找 Server;真正调用客户端直连。
  • Server =eureka-serverjar +@EnableEurekaServer+register/fetch=false。
  • Client =eureka-clientjar +defaultZone指向 Server + 用服务名调用。
  • 选型:服务少→写死;一般→单 Server;生产→Server 集群;新项目可考虑 Nacos。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询