网关自定义过滤器开发实践
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 过滤器顺序——
@Order或Ordered接口
六、自定义断言
- 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 在服务层处理
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!