目录
[1. 单体拆分后的典型问题与对应组件](#1. 单体拆分后的典型问题与对应组件)
[2. 一张典型微服务架构图](#2. 一张典型微服务架构图)
[1. Spring Cloud 与 Boot 对应关系(错配必出问题)](#1. Spring Cloud 与 Boot 对应关系(错配必出问题))
[2. 引入方式:BOM 统一管版本(不写子依赖版本号)](#2. 引入方式:BOM 统一管版本(不写子依赖版本号))
[3. 新旧组件更替(避免学到已淘汰的东西)](#3. 新旧组件更替(避免学到已淘汰的东西))
[1. 核心概念](#1. 核心概念)
[2. Eureka 快速搭建(入门经典)](#2. Eureka 快速搭建(入门经典))
[3. Nacos(国内生产更常见)](#3. Nacos(国内生产更常见))
[4. 统一抽象:DiscoveryClient](#4. 统一抽象:DiscoveryClient)
[四、客户端负载均衡:Spring Cloud LoadBalancer](#四、客户端负载均衡:Spring Cloud LoadBalancer)
[1. 是什么](#1. 是什么)
[2. 给 RestClient 加负载均衡](#2. 给 RestClient 加负载均衡)
[3. 自定义负载均衡策略](#3. 自定义负载均衡策略)
[4. 生产要点](#4. 生产要点)
[五、服务间调用:Spring Cloud OpenFeign](#五、服务间调用:Spring Cloud OpenFeign)
[1. 是什么/为什么](#1. 是什么/为什么)
[2. 开启与定义](#2. 开启与定义)
[3. 常用配置](#3. 常用配置)
[4. 熔断降级方法(fallback)](#4. 熔断降级方法(fallback))
[1. Spring Cloud Config](#1. Spring Cloud Config)
[2. Nacos Config(国内常用,动态推送体验更好)](#2. Nacos Config(国内常用,动态推送体验更好))
[3. 动态刷新机制](#3. 动态刷新机制)
[4. 生产注意](#4. 生产注意)
[1. 为什么需要(雪崩效应)](#1. 为什么需要(雪崩效应))
[2. Resilience4j 核心模块](#2. Resilience4j 核心模块)
[3. 注解式使用](#3. 注解式使用)
[4. 配置示例](#4. 配置示例)
[5. 工程要点](#5. 工程要点)
[八、API 网关:Spring Cloud Gateway](#八、API 网关:Spring Cloud Gateway)
[1. 定位](#1. 定位)
[2. 三大核心概念](#2. 三大核心概念)
[3. 配置示例](#3. 配置示例)
[4. 自定义全局过滤器(鉴权/日志骨架)](#4. 自定义全局过滤器(鉴权/日志骨架))
[5. 生产要点](#5. 生产要点)
[1. 现状](#1. 现状)
[2. 接入](#2. 接入)
[十、消息驱动:Spring Cloud Stream / Function](#十、消息驱动:Spring Cloud Stream / Function)
[十二、2025/2026 新变化](#十二、2025/2026 新变化)
[十三、高频踩坑 / 面试清单](#十三、高频踩坑 / 面试清单)
定位:Spring Cloud 是一套分布式系统/微服务模式的落地工具集 ------把服务注册发现、配置管理、服务调用、负载均衡、熔断限流、网关、链路追踪等常见模式做成开箱即用的 starter。 它不是新框架,而是构建在 Spring Boot 之上的"版本列车(Release Train)" 。 本文基于 2026 年主流栈:Spring Cloud 2025.1.x (Oakwood) + Spring Boot 4.0.x/4.1.x,并兼顾 3.5.x 老系统现状。
一、微服务全景:Spring Cloud 解决什么
1. 单体拆分后的典型问题与对应组件
| 分布式问题 | Spring Cloud 方案 | 说明 |
|---|---|---|
| 服务在哪、谁在线 | 注册中心:Eureka / Nacos / Consul | 服务注册与发现 |
| 请求分摊到多实例 | Spring Cloud LoadBalancer | 客户端负载均衡(Ribbon 已废弃删除) |
| 服务间怎么调 | OpenFeign(声明式)/ RestClient | 像调本地方法一样调远程 |
| 配置统一管理 | Config Server / Nacos Config | 集中配置、动态刷新 |
| 配置变更广播 | Spring Cloud Bus | 借助 MQ 批量刷新 |
| 统一入口、路由、鉴权 | Spring Cloud Gateway | 响应式 API 网关 |
| 下游故障别拖垮我 | Circuit Breaker + Resilience4j | 熔断、降级、隔离、限流、重试 |
| 一次请求跨了哪些服务 | Micrometer Tracing + OpenTelemetry | 分布式链路追踪(Sleuth 已退役) |
| 异步消息 | Spring Cloud Stream / Function | 消息驱动微服务 |
2. 一张典型微服务架构图
客户端(Web/App)
│
▼
┌──────────────────────┐
│ Spring Cloud Gateway │ 路由/鉴权/限流/灰度
└──────────────────────┘
┌───────────────┬───────────────┐
▼ ▼ ▼
user-service order-service product-service (Boot 应用集群)
│ │ │
└───────┬───────┴───────┬───────┘
│ OpenFeign + LoadBalancer 互调
┌───────────▼──────────┐ │
│ 注册中心 Eureka/Nacos │◄───┘ 服务注册/发现/心跳
└──────────────────────┘
┌──────────────────────┐
│ 配置中心 Config/Nacos │◄── Bus(MQ) 动态刷新
└──────────────────────┘
横切:Resilience4j 熔断限流 │ Micrometer Tracing 链路追踪 │ Prometheus 监控
二、版本列车(必须先搞清楚的头等大事)
1. Spring Cloud 与 Boot 对应关系(错配必出问题)
| Release Train | 别名 | Spring Boot | 状态(2026-10) |
|---|---|---|---|
| 2025.1.x | Oakwood | 4.0.x / 4.1.x | 当前 GA(2025.1.3,2026-08) |
| 2025.0.x | Northfields | 3.5.x | OSS 已 2026-06-30 EOL |
| 2024.0.x | Moorgate | 3.4.x | 维护/陆续终止 |
| 2023.0.x | Leyton | 3.2/3.3 | EOL |
| 2026.0.x | Paddington | 4.2.x | M1 里程碑(2026-09) |
2. 引入方式:BOM 统一管版本(不写子依赖版本号)
<properties>
<spring-cloud.version>2025.1.3</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
国内常用 Nacos / Sentinel / Seata 属于 Spring Cloud Alibaba,另有自己的版本对应表,选型时与 Boot 版本对齐。
3. 新旧组件更替(避免学到已淘汰的东西)
| 老组件(已淘汰) | 现代方案 |
|---|---|
| Netflix Ribbon(客户端负载均衡) | Spring Cloud LoadBalancer |
| Netflix Hystrix(熔断) | Resilience4j(经 Spring Cloud Circuit Breaker 抽象) |
| Netflix Zuul 1(网关) | Spring Cloud Gateway |
| Spring Cloud Sleuth(链路追踪) | Micrometer Tracing + OpenTelemetry |
| Eureka | 仍可用(Spring Cloud Netflix 中唯一保留主力),也可选 Nacos/Consul |
三、服务注册与发现
1. 核心概念
-
服务注册:服务启动时把自己的"服务名 + IP + 端口 + 元数据"登记到注册中心;
-
服务发现 :调用方按服务名从注册中心拉取实例列表;
-
心跳/健康检查:定期续约,失联实例被剔除;
-
调用方只认服务名(如
order-service),实例扩缩容、换 IP 对调用方透明。
2. Eureka 快速搭建(入门经典)
Eureka Server:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
server:
port: 8761
eureka:
client:
register-with-eureka: false # 单机自己不注册自己
fetch-registry: false
Eureka Client(业务服务):
spring:
application:
name: user-service # 服务名是发现的 key
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true # 容器环境推荐注册 IP
3. Nacos(国内生产更常见)
-
一个组件同时提供注册中心 + 配置中心,AP/CP 可切换、带控制台和权重/命名空间/分组管理;
-
客户端
spring-cloud-starter-alibaba-nacos-discovery,配置:
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: prod
4. 统一抽象:DiscoveryClient
无论底层是 Eureka/Nacos/Consul,应用都可用 Spring Cloud Commons 的统一 API:
@Service
public class InstanceService {
private final DiscoveryClient discoveryClient;
public InstanceService(DiscoveryClient discoveryClient) {
this.discoveryClient = discoveryClient;
}
public List<ServiceInstance> list() {
return discoveryClient.getInstances("order-service");
}
}
四、客户端负载均衡:Spring Cloud LoadBalancer
1. 是什么
-
调用方本地持有实例列表,发请求前由 LoadBalancer 从列表中选一个实例;
-
默认策略:轮询(RoundRobinLoadBalancer),可切换随机、按权重、 zone 偏好等;
-
替代 Ribbon:新栈中不要再出现 Ribbon/IRule 的配置。
2. 给 RestClient 加负载均衡
@Configuration
public class LbConfig {
@Bean
@LoadBalanced // 关键:让 RestClient 识别服务名并做负载均衡
RestClient.Builder restClientBuilder() {
return RestClient.builder();
}
}
String body = restClient.get()
.uri("http://order-service/api/orders/1") // 用服务名,不用 IP
.retrieve().body(String.class);
3. 自定义负载均衡策略
public class CustomLbConfig {
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(
Environment environment, LoadBalancerClientFactory factory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(
factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}
@Configuration
@LoadBalancerClient(name = "order-service", configuration = CustomLbConfig.class)
public class OrderLbClient { }
注意
@LoadBalancerClient的 configuration 类不要放在 @ComponentScan 能扫到的包,否则会变成全局配置。
4. 生产要点
-
开启**实例缓存(loadBalancerCache)**并理解刷新延迟(新实例秒级才可见);
-
配重试时区分"连接失败重试"与"业务超时",非幂等写操作不要盲目重试;
-
K8s 环境也可直接用 Service 做服务端负载均衡,二选一或组合要明确。
五、服务间调用:Spring Cloud OpenFeign
1. 是什么/为什么
-
声明式 HTTP 客户端:定义一个 Java 接口 + 注解,Feign 自动生成实现、拼 URL、编码参数、负载均衡选实例、解码结果;
-
比手写 RestClient 模板代码少,团队接口契约统一。
2. 开启与定义
@EnableFeignClients
@SpringBootApplication
public class UserApplication { ... }
@FeignClient(name = "order-service", path = "/api/orders")
public interface OrderClient {
@GetMapping("/{id}")
OrderVO getById(@PathVariable("id") Long id);
@PostMapping
OrderVO create(@RequestBody OrderCreateDTO dto);
@GetMapping
Page<OrderVO> page(@RequestParam("userId") Long userId,
@RequestParam("page") int page,
@RequestParam("size") int size);
}
使用:
@Service
public class UserBizService {
private final OrderClient orderClient;
public UserBizService(OrderClient orderClient) { this.orderClient = orderClient; }
public OrderVO queryOrder(Long orderId) {
return orderClient.getById(orderId);
}
}
要点:
-
name必须是注册中心里的服务名;URL 走 LoadBalancer 选实例; -
@PathVariable/@RequestParam必须显式写 value(老版本 Feign 不保留参数名); -
调外部三方(不在注册中心):
@FeignClient(name="xxx", url="https://..."); -
多参数 GET 别误用
@RequestBody;文件上传需 feign-form 扩展。
3. 常用配置
spring:
cloud:
openfeign:
client:
config:
order-service:
connect-timeout: 2000
read-timeout: 3000
logger-level: basic
circuitbreaker:
enabled: true # 开启后 Feign 集成熔断器(见第七节)
compression:
request:
enabled: true
mime-types: application/json
response:
enabled: true
-
日志级别:NONE / BASIC / HEADERS / FULL(FULL 只建议临时排障,注意脱敏);
-
拦截器(
RequestInterceptor)统一加 traceId、鉴权头; -
错误解码器(
ErrorDecoder)把远程错误码转成业务异常,而不是统一抛 500; -
HTTP 底层连接池可切换(Apache HC5 / OkHttp),高并发必配连接池。
4. 熔断降级方法(fallback)
@FeignClient(name = "order-service", fallback = OrderClientFallback.class)
public interface OrderClient {
@GetMapping("/{id}")
OrderVO getById(@PathVariable Long id);
}
@Component
public class OrderClientFallback implements OrderClient {
@Override
public OrderVO getById(Long id) {
return OrderVO.unavailable(); // 兜底数据/缓存
}
}
想区分降级原因用
fallbackFactory,可拿到触发的异常。
六、配置中心与动态刷新
1. Spring Cloud Config
Config Server(集中拉取配置,后端可放 Git/Native/Vault):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
@EnableConfigServer
@SpringBootApplication
public class ConfigApplication { ... }
spring:
cloud:
config:
server:
git:
uri: https://git.example.com/config-repo
Client 端导入配置:
spring:
config:
import: configserver:http://localhost:8888
application:
name: user-service
profiles:
active: dev
配置仓库中按 user-service-dev.yml 命名,client 自动按 应用名+profile 拉取。
2. Nacos Config(国内常用,动态推送体验更好)
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
namespace: dev
Data ID 约定 user-service.yaml / user-service-dev.yaml,控制台改完即推送。
3. 动态刷新机制
- 需要热更新的 Bean 加
@RefreshScope,配置变更时重建该 Bean:
@RestController
@RefreshScope
public class FeatureController {
@Value("${feature.new-ui:false}")
private boolean newUi;
}
-
手动触发单个服务:
POST /actuator/refresh; -
批量广播:Spring Cloud Bus(接 RabbitMQ/Kafka),向 busrefresh 端点发一次请求即刷新所有节点;
-
Nacos 客户端默认长轮询/推送,配合
@RefreshScope或@ConfigurationProperties自动生效。
4. 生产注意
-
配置中心要高可用集群 ,它是启动依赖(配合
spring.cloud.config.fail-fast、重试); -
敏感配置加密存储(Config 加密 / Vault / KMS),不进 Git 明文;
-
配置变更要有审批、审计、灰度和回滚,别把配置中心当随便改的在线面板。
七、熔断、限流与隔离:Resilience4j
1. 为什么需要(雪崩效应)
下游服务慢/挂 → 调用方线程被占满 → 连锁拖垮上游。解法组合:超时 + 熔断(快速失败)+ 舱壁隔离 + 限流 + 重试。
Spring Cloud 提供统一抽象 Spring Cloud Circuit Breaker ,推荐实现 Resilience4j(函数式、轻量,Hystrix 已淘汰)。
2. Resilience4j 核心模块
| 模块 | 作用 |
|---|---|
| CircuitBreaker | 熔断器:关闭→打开(错误率/慢调用超阈值后快速失败)→半开(试探放行)→关闭 |
| TimeLimiter | 限时,防止长时间阻塞 |
| Bulkhead | 舱壁:限制某下游的并发线程/信号量,故障隔离 |
| RateLimiter | 限流:固定周期内允许的请求数 |
| Retry | 自动重试(指数退避、抖动) |
3. 注解式使用
@Service
public class PaymentService {
@CircuitBreaker(name = "bankApi", fallbackMethod = "payFallback")
@TimeLimiter(name = "bankApi")
@Bulkhead(name = "bankApi", type = Bulkhead.Type.SEMAPHORE)
public CompletableFuture<PayResult> pay(PayRequest req) {
return CompletableFuture.supplyAsync(() -> bankClient.invoke(req));
}
private CompletableFuture<PayResult> payFallback(PayRequest req, Exception e) {
return CompletableFuture.completedFuture(PayResult.degraded("支付通道繁忙,请稍后再试"));
}
@RateLimiter(name = "smsApi")
public void sendSms(String mobile) { ... }
}
4. 配置示例
resilience4j:
circuitbreaker:
instances:
bankApi:
sliding-window-type: COUNT_BASED
sliding-window-size: 20
failure-rate-threshold: 50
slow-call-rate-threshold: 60
slow-call-duration-threshold: 2s
wait-duration-in-open-state: 10s
permitted-number-of-calls-in-half-open-state: 5
minimum-number-of-calls: 10
ratelimiter:
instances:
smsApi:
limit-for-period: 10
limit-refresh-period: 1s
timeout-duration: 0
timelimiter:
instances:
bankApi:
timeout-duration: 3s
5. 工程要点
-
熔断是保护自己,降级要给用户可理解的结果(缓存/默认值/稍后重试),不是吞异常;
-
超时、重试、熔断三者参数要协调:重试总时间 < 上游超时;
-
写操作重试必须幂等;限流要在网关 + 服务多层设防;
-
监控熔断状态转换(Micrometer 已暴露指标),频繁 open 说明下游真有问题。
八、API 网关:Spring Cloud Gateway
1. 定位
-
基于 Spring WebFlux + Reactor + Netty 的响应式网关,高并发非阻塞;
-
职责:统一入口、路由转发、鉴权、限流、灰度、日志、跨域、协议转换;
-
替代 Zuul 1 ;与 servlet 栈不同,网关模块不要混用
spring-boot-starter-web。
2. 三大核心概念
-
Route 路由:ID + 目标 URI + 一组 Predicate + 一组 Filter;
-
Predicate 断言:匹配条件(Path、Header、Host、Method、时间、权重等);
-
Filter 过滤器:对请求/响应做修改(加头、鉴权、改写路径、限流)。
3. 配置示例
spring:
cloud:
gateway:
discovery:
locator:
enabled: true # 可按注册中心服务名自动路由
routes:
- id: user-route
uri: lb://user-service # lb:// 表示经 LoadBalancer 负载均衡
predicates:
- Path=/api/users/**
filters:
- StripPrefix=1
- id: order-route
uri: lb://order-service
predicates:
- Path=/api/orders/**
- Header=X-Channel, \d+
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 100
redis-rate-limiter.burstCapacity: 200
key-resolver: "#{@userKeyResolver}"
KeyResolver(按用户限流):
@Bean
KeyResolver userKeyResolver() {
return exchange -> Mono.just(
exchange.getRequest().getHeaders().getFirst("X-User-Id"));
}
4. 自定义全局过滤器(鉴权/日志骨架)
@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (token == null) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override public int getOrder() { return -100; }
}
5. 生产要点
-
网关本身要无状态、多实例 + 前置 LB;限流状态存 Redis 集中共享;
-
跨域在网关统一配(CorsWebFilter);敏感头/协议头注意可信代理白名单(2026 年有相关 CVE 修复,保持版本更新);
-
别在网关写重业务逻辑,它只做横切;
-
灰度发布可用权重断言(
Weight)或 header 路由到灰度实例。
九、分布式链路追踪
1. 现状
-
Spring Cloud Sleuth 已退役 ;现代方案 Micrometer Tracing + OpenTelemetry(OTel);
-
Boot 3/4 已内置 Micrometer,自动给 Web、Feign、JDBC、Kafka 等埋点并透传 traceId/spanId;
-
上报后端:OTel Collector → Tempo/Jaeger/Zipkin,日志中用同一 traceId 关联。
2. 接入
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
management:
tracing:
sampling:
probability: 0.1 # 生产按比例采样,排障时临时调到 1.0
zipkin:
tracing:
endpoint: http://localhost:9411/api/v2/spans
要点:traceId 自动进 MDC,结构化日志直接输出;跨线程(线程池/@Async)要包装线程池才能延续上下文。
十、消息驱动:Spring Cloud Stream / Function
- Spring Cloud Stream 抽象 binder(Kafka/Rabbit),业务只写函数:
@Configuration
public class OrderEventStream {
@Bean
Consumer<OrderCreatedEvent> orderCreated() {
return event -> { /* 处理事件 */ };
}
@Bean
Supplier<OrderPaidEvent> orderPaid() {
return () -> new OrderPaidEvent(...);
}
}
spring:
cloud:
function:
definition: orderCreated
stream:
bindings:
orderCreated-in-0:
destination: order.created
group: user-service # 消费组保证同组只消费一次
kafka:
binder:
brokers: localhost:9092
- 与 Spring Cloud Bus 的区别:Bus 是运维事件总线(刷新/广播) ,Stream 是业务消息。
十一、一个典型服务的最小骨架
user-service 的 application.yml:
server:
port: 8081
spring:
application:
name: user-service
config:
import: optional:nacos:user-service.yaml # 或 configserver:...
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
openfeign:
circuitbreaker:
enabled: true
management:
endpoints:
web:
exposure:
include: health,prometheus
tracing:
sampling:
probability: 0.1
依赖清单(按需要选):
-
spring-boot-starter-web(Boot4 可 starter-webmvc) -
spring-cloud-starter-netflix-eureka-client或nacos-discovery -
spring-cloud-starter-openfeign -
spring-cloud-starter-loadbalancer(OpenFeign 通常已传递带入) -
spring-cloud-starter-circuitbreaker-resilience4j -
spring-cloud-starter-config/nacos-config -
spring-boot-starter-actuator+ micrometer-tracing -
网关独立服务:
spring-cloud-starter-gateway(不带 web starter)
十二、2025/2026 新变化
-
Cloud 2025.1 (Oakwood) :跟随 Spring Boot 4 / Framework 7 / Jakarta EE 11;持续安全修复(Commons、Gateway、Config 多个 CVE,保持补丁更新)。
-
Cloud 2026.0.0-M1 (Paddington) :基于 Boot 4.2;Resilience4j 升到 2.4 、Feign 升到 13.14、Gateway 从 Reactor Addons Retry 迁移到 Framework Core Retry、Config 增加 HTTP property path notifier 与 Azure DevOps workload identity 支持。
-
趋势:对 Kubernetes 原生(Spring Cloud Kubernetes:服务发现、配置、istio 协同)和声明式/平台化(注册发现下沉到 K8s,应用侧更薄)的支持持续增强;HTTP Interface 与 OpenFeign 定位部分重叠,新项目可按"是否依赖注册中心生态"选择。
十三、高频踩坑 / 面试清单
-
版本不匹配:Cloud 与 Boot 乱搭导致启动各种 NoSuchMethod/自动配置不生效------严格按兼容表 + BOM。
-
服务发现拿到旧实例 :客户端缓存刷新延迟、心跳未续约;容器多网卡要配
prefer-ip-address/网卡。 -
Feign 坑:参数注解不写 value、GET 用实体变 POST、长 URL、没配连接池、超时与上游冲突。
-
熔断形同虚设:没配超时/没开启 Feign circuitbreaker、fallback 里再抛异常、降级不记日志无法告警。
-
重试风暴:多层(Feign + Resilience4j + 网关)叠加重试把下游打挂------重试只放一层、总预算受控、保证幂等。
-
网关混用 MVC:Gateway 是 WebFlux,引入 spring-webmvc 导致启动/运行模型冲突。
-
配置不刷新 :忘了
@RefreshScope、Bus 没连同一个 MQ、namespace/group 不一致。 -
链路断链:异步线程、线程池、WebClient/Feign 未走埋点组件导致 traceId 丢失。
-
注册中心/配置中心单点:必须集群 + 失败快速失败策略;启动顺序与依赖要演练。
-
CAP 取舍:Eureka 偏 AP(保可用、可能含过期实例,客户端需容错);配置中心/注册中心选型要理解一致性模型。
参考资料
-
Spring Cloud 官方项目页 --- Spring Cloud
-
Spring Cloud 2025.1.3 (Oakwood) 发布说明 --- Spring | Blog (2026-08-20)
-
Spring Cloud 2026.0.0-M1 (Paddington) --- Spring Cloud 2026.0.0-M1 (aka Paddington) Has Been Released
-
Spring Cloud 兼容版本表 --- Supported Versions · spring-cloud/spring-cloud-release Wiki · GitHub
-
Spring Cloud OpenFeign 文档 --- Spring Cloud OpenFeign
-
Spring Cloud Gateway 文档 --- Spring Cloud Gateway
-
Spring Cloud Circuit Breaker(Resilience4j)--- Spring Cloud Circuit Breaker
-
Resilience4j 官方文档 --- resilience4j
-
Micrometer Tracing 文档 --- Tracing support :: Micrometer Tracing
-
Spring Cloud Alibaba(Nacos/Sentinel/Seata)--- GitHub - alibaba/spring-cloud-alibaba: Spring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware. · GitHub