什么是 Spring Cloud Gateway?
- 标签:Spring Cloud Gateway、微服务、后端、网关
🏛 业务架构师
Spring Cloud Gateway 是 Spring 官方的 API 网关实现,基于 Spring WebFlux + Netty(响应式非阻塞)构建,三个核心模型讲清它:
Route(路由):网关的基本单元 = Predicate(断言)+ Filter(过滤器)+ 目标 URI。配置中心动态管理路由(对接 Nacos 实现路由热更新);
Predicate(断言):匹配条件——Path、Method、Header、Query、Weight(按权重灰度) 等。决定"这个请求走哪条路由";
Filter(过滤器):请求/响应的改写与横切逻辑,分全局过滤器(GlobalFilter)与路由级过滤器。鉴权、限流、改写路径、灰度标注入都在这里实现——过滤器链(有序执行)是网关治理能力的载体。
典型配置:
yaml
spring:
cloud:
gateway:
routes:
- id: order-route
uri: lb://order-service # 负载均衡到注册中心的服务
predicates:
- Path=/api/order/**
filters:
- StripPrefix=1业务架构师视角的评价:
- 优势:与 Spring Cloud 无缝(Nacos 发现、Sentinel 限流、LoadBalancer)、Java 技术栈可自研扩展(公司横切逻辑自己写 Filter)、响应式架构吞吐好;
- 注意:响应式编程对团队有门槛(自定义 Filter 要具备 WebFlux 心智);网关上只放通用横切,禁止堆业务逻辑;配置中心的动态路由要配审计与回滚。
一句话:Gateway 的价值在于**"Java 团队用熟悉的技术栈掌控全局流量入口"**。
🏗 系统架构师
定义:Spring Cloud 官方 API 网关,基于 WebFlux/Netty 的 Reactive 非阻塞模型构建,接替 Zuul 的主力组件。
核心模型三件套:
- Route:路由 = Predicate(断言)加 URI 加 Filter 集合;
- Predicate:匹配条件——Path/Method/Header/Query/时间/权重(Weight 断言可做灰度分流);
- Filter:请求响应的处理器链——GatewayFilter(路由级)与 GlobalFilter(全局,自定义鉴权、trace、限流挂这里),内置三十余个(路径改写、RequestRateLimiter 加 Redis 限流、熔断整合)。
架构要点:
- Reactive 的选型逻辑:网关是纯 IO 转发场景——少量 event loop 线程扛海量连接,每请求内存占用小;阻塞模型网关在几万并发下线程内存爆炸。这是网关层用 WebFlux 的教科书理由;
- 动态路由:路由定义可接 Nacos/Redis 配置源,运营化变更不重启;
- 与 Nacos(lb://服务名路由)、Sentinel(网关流控)组合是国内标准栈;
- 生产红线:限流兜底、请求体大小限制、Filter 内禁止阻塞调用——CPU 密集或同步 IO 会卡死 event loop,全网关瘫痪。
💻 全栈开发专家
Spring Cloud Gateway 是 Spring 官方 API 网关,基于 Spring WebFlux + Reactor + Netty,异步非阻塞模型(对比 Zuul 1 的 Servlet 阻塞,性能高一档)。
三大抽象:
- Route 路由:基础单元 = 目标 URI + 一组 Predicate + 一组 Filter
- Predicate 断言:匹配条件(Path/Method/Header/Query/时间/权重)
- Filter 过滤器:
GatewayFilter(按路由)和GlobalFilter(全局),改写请求/响应
yaml
spring:
cloud:
gateway:
routes:
- id: order-route
uri: lb://order-service # lb:// = 从注册中心负载均衡
predicates:
- Path=/api/order/**
- Method=GET,POST
filters:
- StripPrefix=1
- name: RequestRateLimiter # 令牌桶限流(Redis)
args:
redis-rate-limiter.replenishRate: 100
redis-rate-limiter.burstCapacity: 200
key-resolver: "#{@ipKeyResolver}"典型 GlobalFilter 用途:JWT 鉴权、traceId 注入、灰度标签路由(按 header 选 metadata 版本)。动态路由:监听 Nacos 配置变更刷新 RouteDefinitionWriter,不停机加路由。
生产两个必配:限流和超时+熔断(防网关被慢下游拖住)。大忌:WebFlux 体系里在 Filter 写阻塞代码(JDBC/同步 HTTP),会卡死事件循环。