微服务网关Gateway实战:限流、鉴权、灰度发布一站式实现

📅 2026/8/8 5:05:48
微服务网关Gateway实战:限流、鉴权、灰度发布一站式实现
做微服务开发的同学应该都清楚SpringCloud Gateway 几乎是目前微服务架构的统一入口核心。所有前端请求、第三方接口调用都会先经过网关再转发到具体业务服务。很多初学微服务的朋友只是简单配置一下路由转发就直接上线项目完全没用到网关的核心能力。等到线上出现接口被刷、未授权访问、版本迭代不敢灰度、高并发打垮服务等问题才发现网关少做了三层核心防护限流、统一鉴权、灰度发布。今天我结合日常项目实战经验不带空话、纯落地教学手把手教大家在 Gateway 中一站式实现限流、鉴权、灰度发布三大核心功能附带完整可直接复用的代码生产环境稍加修改就能直接上线。一、为什么必须用 Gateway 统一处理这三大功能很多新手会把鉴权、限流写在每个业务服务内部其实这是非常不规范的写法。如果每个微服务都单独写一套拦截逻辑不仅代码冗余、维护麻烦还会出现规则不统一、漏洞多的问题。而网关作为流量唯一入口所有通用非业务逻辑都应该放在网关层处理业务服务只需要专注业务CRUD这也是微服务架构的标准设计思想。目前主流企业级架构全部都是在网关层统一实现请求过滤、Token鉴权、流量限流、灰度路由、跨域处理、日志收集。二、基础依赖配置首先引入 Gateway 核心依赖搭配 Redis 实现分布式限流这是生产环境标配组合dependencies !-- SpringCloud Gateway 网关核心 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-gateway/artifactId /dependency !-- Redis 分布式限流依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis-reactive/artifactId /dependency /dependencies三、网关统一Token鉴权实战统一鉴权是网关最基础的功能。核心逻辑就是自定义全局过滤器拦截所有请求校验Header中的Token无效Token直接拦截不转发下游服务。我写了一套生产常用的全局鉴权过滤器Component public class AuthGlobalFilter implements GlobalFilter, Ordered { // 放行接口登录、注册、验证码 private static final ListString WHITE_LIST Arrays.asList(/login,/register,/captcha); Override public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) { String path exchange.getRequest().getPath().value(); // 白名单直接放行 if (WHITE_LIST.contains(path)) { return chain.filter(exchange); } // 获取请求头Token String token exchange.getRequest().getHeaders().getFirst(Token); // 简单校验实际项目可结合JWT解析、过期判断 if (StringUtils.isEmpty(token)) { ServerHttpResponse response exchange.getResponse(); response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); } return chain.filter(exchange); } Override public int getOrder() { // 最高优先级执行 return Ordered.HIGHEST_PRECEDENCE; } }这种全局过滤方式能拦截所有非法请求避免下游每个服务重复写拦截逻辑非常简洁统一。四、Redis Gateway 分布式限流实战线上服务最怕瞬间高并发、恶意刷接口这时候就必须靠限流兜底。我采用网关自带的RequestRateLimiter令牌桶限流方案基于Redis实现支持分布式集群限流。