实际场景引入
想象一下,你所在的城市是一个大型的微服务架构应用。每一条道路代表一个服务(如用户服务、订单服务、支付服务),而每天有成千上万的车辆(请求)在这些道路上穿梭。如果没有一个统一的交通指挥系统,城市将陷入混乱:车辆随意变道、超速行驶、闯红灯、高峰期拥堵......
这就是为什么我们需要 Spring Cloud Gateway ------ 它就像城市的智能交通指挥中心,负责所有进出微服务的流量调度与管理。
深度解析:Spring Cloud Gateway 的核心机制
类比:交通指挥系统的三大职能
-
路由(Routing)------ 车辆该走哪条路? 交警根据车牌目的地,引导车辆进入正确的道路。同理,网关根据请求路径将流量转发到对应的服务。
-
过滤器(Filters)------ 是否超载?是否酒驾? 相当于检查站,对每一辆经过的车进行安全检查(权限验证)、限速控制(限流)、记录行车轨迹(日志)等。
-
断言(Predicates)------ 何时放行?谁可以通行? 红绿灯和ETC通道就是典型的"断言"逻辑:只有满足条件(绿灯亮、已缴费)才能通行。
代码示例:构建你的"交通指挥中心"
1. 添加依赖
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2. 配置路由规则(application.yml)
yaml
spring:
cloud:
gateway:
routes:
- id: user-service-route
uri: lb://user-service # 使用负载均衡访问用户服务
predicates:
- Path=/api/users/** # 当请求路径匹配 /api/users/ 开头时
filters:
- StripPrefix=1 # 去掉前缀再转发
- AddRequestHeader=Authorization, Bearer token123
这条配置的意思是:
- 所有访问
/api/users/**
的请求,都将被引导至user-service
微服务。 - 网关会自动去除第一级路径(StripPrefix=1),并将附加认证头后转发。
3. 自定义全局过滤器:实现"车辆安检"功能
java
@Component
public class SecurityCheckGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (token == null || !token.startsWith("Bearer")) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
// 放行通过
return chain.filter(exchange);
}
@Override
public int getOrder() {
return -1; // 优先级最高,最先执行
}
}
这就像设立了一个全城通行的安检站,任何没有有效通行证的车辆一律禁止通行。
4. 动态路由 + Nacos 集成(高级玩法)
结合 Spring Cloud Alibaba 的 Nacos,我们可以实现动态路由更新,无需重启网关即可修改规则,相当于交通指挥中心实时接收新的交通管制指令。
yaml
# 启用从 Nacos 拉取路由配置
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
config:
server:
type: nacos
data-id: gateway-routes
group: DEFAULT_GROUP
要点总结
| 功能 | 类比 | 技术实现 | |------|------|---------| | 路由分发 | 交警指挥车辆走向正确道路 | Route
+ Path Predicate
| | 请求预处理 | 安检站检查证件、登记信息 | GatewayFilter
(局部)| | 全局拦截 | 全域限速、统一安防策略 | GlobalFilter
| | 动态更新 | 实时接收交通管制通知 | 集成 Nacos / Config Server | | 性能优化 | 高峰期智能分流 | Netty 异步非阻塞模型 |
Spring Cloud Gateway 的优势:
- 基于 Project Reactor 和 Netty,性能远超传统同步网关(如 Zuul 1.x)
- 提供丰富的内置断言和过滤器
- 支持 WebSocket 和限流(结合 Redis + Lua)
- 易于扩展自定义逻辑
只要设计得当,Spring Cloud Gateway 就能成为你微服务体系中最可靠、最高效的"交通指挥官"。