中 进阶
SpringCloud-Gateway原理#
一句话答案#
Gateway 基于 WebFlux + Netty 非阻塞,请求匹配 Predicate 找路由,经 Filter 链处理后转发下游服务。
核心要点
三大核心:
- Route:定义路由规则(id + uri + predicates + filters)
- Predicate:匹配条件(Path/Header/Query/Method等)
- Filter:前置/后置处理(限流/鉴权/日志/重写等)
执行流程: 请求 → Predicate匹配路由 → 执行FilterChain → 转发到下游服务
两类过滤器:
- GlobalFilter:全局过滤器,对所有路由生效(统一认证、日志记录)
- GatewayFilter:局部过滤器,只对配置了的路由生效(请求耗时统计等)
Pre / Post 过滤器执行顺序:
请求 → [Global Pre -1] → [Global Pre 0] → [Route Pre 1]
→ 转发到下游服务 →
响应 ← [Route Post 1] ← [Global Post 0] ← [Global Post -1]plaintextOrder 值越小优先级越高,Pre 按升序执行,Post 按降序执行。
面试回答(2分钟版)
Spring Cloud Gateway是微服务架构中的API网关,底层基于WebFlux和Netty实现全异步非阻塞,相比Zuul 1.x的同步阻塞模型吞吐量更高。它的核心由三个概念组成:Route路由定义了请求的转发规则,包含id、目标uri、断言和过滤器;Predicate断言用来匹配请求,支持按路径、请求头、查询参数、请求方法等多种条件组合判断;Filter过滤器分为Gateway Filter和Global Filter,在请求转发前后做处理,比如鉴权、限流、日志记录、请求改写等。执行流程是请求进来后先通过Predicate匹配到对应的Route,然后依次经过Filter链处理,最后转发到下游微服务。实际项目中Gateway常用来做统一鉴权、限流熔断(集成Sentinel)、灰度发布(通过自定义Filter按权重路由)和请求日志。和Nginx的职责不同,Nginx侧重静态资源和四七层负载均衡,Gateway侧重业务层面的路由治理和服务发现集成。
追问与易错
追问方向:
- “Gateway 和 Zuul 区别?”→ Gateway 基于 WebFlux + Netty 全异步非阻塞,性能更高;Zuul 1.x 基于 Servlet 同步阻塞模型,每个请求占一个线程。Zuul 2.x 虽改为异步但 Netflix 已停止维护
- “Gateway 限流怎么做?”→ 内置 RequestRateLimiterGatewayFilterFactory 配合 Redis 实现令牌桶限流,也可集成 Sentinel 做更精细的流控(QPS/并发数/热点参数)
- “Gateway 怎么实现灰度?”→ 自定义 GlobalFilter 或 LoadBalancer,根据请求头/Cookie/权重等条件将流量路由到不同版本的服务实例,配合 Nacos 元数据标记服务版本
易错点:
- ❌ Gateway 和 Nginx 一样——职责不同
- ❌ Gateway 性能不如 Nginx——职责不同不可比