Spring Cloud Gateway 基于 WebFlux 的响应式架构,比 Zuul 1.x 性能更好。本文从路由规则到自定义过滤器,一步步搭建生产可用的网关。

一、网关的核心职责

  • 1.1 路由转发——请求分发到对应的微服务
  • 1.2 统一鉴权——Token 校验、权限控制
  • 1.3 限流——基于 Redis 的令牌桶
  • 1.4 日志/监控——请求日志、调用链
  • 1.5 协议转换——HTTP → gRPC / WebSocket

二、Spring Cloud Gateway 核心概念

  • 2.1 Route——路由,ID + URI + Predicates + Filters
  • 2.2 Predicate——断言,匹配请求条件
  • 2.3 Filter——过滤器,对请求/响应做修改
  • 2.4 整体架构——基于 Netty + WebFlux,非阻塞

三、路由配置

  • 3.1 YAML 配置方式——spring.cloud.gateway.routes
  • 3.2 Java DSL 配置方式——RouteLocatorBuilder
  • 3.3 动态路由——从 Nacos 配置中心获取
  • 3.4 Path / Host / Header / Method 等断言

四、内置过滤器

  • 4.1 AddRequestHeader / AddRequestParameter
  • 4.2 StripPrefix——去除路径前缀
  • 4.3 RewritePath——路径重写
  • 4.4 RequestRateLimiter——基于 Redis 的限流

五、自定义过滤器开发

  • 5.1 GlobalFilter——全局过滤器
  • 5.2 GatewayFilter——局部过滤器
  • 5.3 开发统一鉴权过滤器——AuthGlobalFilter
  • 5.4 开发请求日志过滤器——LoggingGlobalFilter
  • 5.5 过滤器顺序——@OrderOrdered 接口

六、自定义断言

  • 6.1 AbstractRoutePredicateFactory 的实现
  • 6.2 开发一个自定义断言——按时间段路由

七、生产环境实践

  • 7.1 跨域配置——CorsConfiguration
  • 7.2 超时与重试——spring.cloud.gateway.httpclient
  • 7.3 优雅停机——gracefulShutdown
  • 7.4 网关高可用——多实例 + Nginx

八、总结

  • Gateway vs Zuul vs Nginx/Kong 的选型
  • 什么时候需要在网关层处理 vs 在服务层处理