






















在 Spring Cloud 微服务架构中,网关(Gateway)是客户端与微服务集群之间的 "统一入口",负责处理跨服务的共性问题。以下从作用、实现原理、核心配置(含限流、鉴权详解)三方面展开说明。
微服务拆分后,客户端需与多个服务直接交互,会面临地址管理、权限混乱、流量失控等问题。网关的核心作用是统一管控这些共性问题,具体包括:
/user/**转发到用户服务,/order/**转发到订单服务)。Spring Cloud Gateway 是目前主流的网关组件(替代了 Zuul),基于Netty 响应式编程(非阻塞),性能优于传统的 Servlet 阻塞式架构。其核心原理依赖三个核心概念:路由(Route)、断言(Predicate)、过滤器(Filter)。
路由(Route):网关的基本单元,定义 "请求如何转发"。由三部分组成:
id:路由唯一标识;uri:目标服务地址(如lb://user-service,lb表示负载均衡,user-service是服务名);predicates:断言集合(判断请求是否匹配当前路由);filters:过滤器集合(对请求 / 响应进行加工)。断言(Predicate):本质是 "条件判断规则",用于匹配请求的属性(如路径、方法、请求头、时间等)。例如:
Path=/user/**:匹配路径以/user/开头的请求;Method=GET:只匹配 GET 请求;Header=token, \d+:匹配请求头token的值为数字的请求。过滤器(Filter):对请求 / 响应进行拦截和处理,分为两类:
GatewayFilter:针对特定路由的过滤器(如某个路由的路径重写);GlobalFilter:全局过滤器(对所有路由生效,如鉴权、日志)。客户端请求到达网关后,处理流程如下:
/user/1匹配Path=/user/**的路由)。uri指定的目标服务(通过负载均衡选择具体实例)。Spring Cloud Gateway 的配置可通过application.yaml(或application.properties)和代码两种方式实现,以下重点说明常用配置。
通过配置文件定义路由规则,示例:
spring:
cloud:
gateway:
routes:
uri: lb://服务名需配合服务发现组件(如 Nacos),网关会自动从注册中心获取服务实例地址并实现负载均衡。限流用于保护服务不被高并发击垮,Spring Cloud Gateway 基于令牌桶算法实现,需结合 Redis 存储令牌桶状态(依赖spring-boot-starter-data-redis-reactive)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
需定义限流键(KeyResolver)(如按 IP、用户 ID、接口路径限流),并在路由中启用限流过滤器。
示例 1:按 IP 限流(同一 IP 单位时间内最多 N 个请求)① 定义 KeyResolver(获取客户端 IP):
@Configuration
public class GatewayConfig {
② 在路由中配置限流过滤器:
spring:
cloud:
gateway:
routes:
- id: user-service-route
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- name: RequestRateLimiter
说明:replenishRate=10表示每秒生成 10 个令牌,burstCapacity=20表示最多允许突发 20 个请求(超过则限流,返回 429 状态码)。
示例 2:按接口路径限流(同一接口单位时间内最多 N 个请求)① 定义按路径的 KeyResolver:
@Bean
public KeyResolver pathKeyResolver() {
return exchange -> Mono.just(
exchange.getRequest().getPath().toString()
② 路由中引用pathKeyResolver即可。
鉴权是网关的重要职责,通常基于 Token(如 JWT)实现:客户端请求时携带 Token,网关验证 Token 有效性,无效则拒绝访问。
全局过滤器对所有路由生效,步骤如下:
@Component
@Order(-1)
gateway:
auth:
white-list: /login,/health,/public/**
跨域配置:解决前端跨域问题(浏览器限制不同域名的请求):
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
熔断降级:结合 Resilience4j,当下游服务超时 / 异常时返回降级响应:
spring:
cloud:
gateway:
routes:
- id: user-service-route
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- name: CircuitBreaker
需额外定义/fallback/user接口,返回降级响应(如{"code":503,"msg":"服务暂时不可用"})。
Spring Cloud 网关通过路由转发连接客户端与微服务,通过断言匹配请求,通过过滤器实现限流、鉴权等共性功能。核心配置中,限流依赖 Redis 和令牌桶算法,鉴权依赖自定义全局过滤器验证 Token,二者共同保障微服务的安全性和稳定性。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。