Gateway
Gateway
Spring Cloud Gateway 基于 Spring 5.0 + WebFlux + Netty 开发,性能高于 Zuul 约 1.6 倍。
适用场景
微服务统一入口、路由转发、认证鉴权、限流熔断、日志记录。
核心概念
| 概念 | 说明 |
|---|---|
| Route(路由) | 网关基本单元,由 ID、目标 URL、谓词和过滤器组成 |
| Predicate(谓词) | 判断请求是否满足条件的函数 |
| Filter(过滤器) | 请求/响应处理前后的修改逻辑 |
快速开始
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>spring:
cloud:
gateway:
routes:
- id: service-goods
uri: lb://service-goods # lb:// 使用负载均衡
predicates:
- Path=/goods/**
filters:
- StripPrefix=1 # /goods/api → /api常用 Predicate
| Predicate | 说明 | 示例 |
|---|---|---|
| Path | 路径匹配 | Path=/goods/** |
| Method | HTTP 方法 | Method=GET |
| Header | 请求头匹配 | Header=X-Request-Id, \d+ |
| Query | 查询参数 | Query=name, jack |
| After | 时间之后 | After=2024-01-01T00:00:00+08:00 |
全局过滤器
实现 GlobalFilter 接口定义全局过滤器(认证、日志等):
@Component
public class GlobalAuthFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (token == null) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() { return -1; }
}常见问题
| 问题 | 排查方向 |
|---|---|
| 路由不生效 | 检查 uri、目标服务是否注册、Predicate 路径匹配 |
| 跨域问题 | 配置 globalcors.cors-configurations |