CodeWalk

Spring Cloud Gateway工作原理与过滤器链

作者:Yahuda · 2026-05-30 12:55

请详细介绍Spring Cloud Gateway的架构原理(非阻塞WebFlux、Netty、Route/Predicate/Filter)。Gateway过滤器链的执行顺序是怎样的?与Zuul(1.x)有什么区别?如何实现限流和鉴权?

回答

Yahuda

Spring Cloud Gateway核心概念

  • Route(路由):网关的基本构建块,包含ID、目标URI、Predicate集合、Filter集合
  • Predicate(断言):匹配HTTP请求的条件(如路径、请求头、参数、时间等)
  • Filter(过滤器):对请求/响应进行修改的拦截器

工作原理

  1. 客户端请求到达Gateway
  2. DispatcherHandler(基于WebFlux)匹配Route(遍历Predicates)
  3. 匹配成功后,组装Filter链(pre + post)
  4. 通过Netty转发请求到目标服务
  5. 返回响应(经过post过滤器)

过滤器执行顺序

  1. GatewayFilter(路由级别的过滤器,@Order控制顺序)
  2. GlobalFilter(全局过滤器,ordered接口控制顺序)
  3. Pre类型(加自定义请求头、鉴权、限流)→ 转发 → Post类型(修改响应)

Gateway vs Zuul 1.x

对比GatewayZuul 1.x
底层Spring WebFlux + NettyServlet(阻塞IO)
线程模型事件驱动(非阻塞)每个请求一个线程(BIO)
性能高(非阻塞IO)一般(线程池inflight受限)
长连接支持WebSocket不支持
限流内置RequestRateLimiter需自定义

限流实现

filters:
  - name: RequestRateLimiter
    args:
      key-resolver: "#{@userKeyResolver}"
      redis-rate-limiter.replenishRate: 10
      redis-rate-limiter.burstCapacity: 20

鉴权实现:自定义GlobalFilter,在Chain.filter之前校验Token/JWT。