实际场景引入
想象一下双十一期间的快递分拣中心。海量包裹(用户请求)从四面八方涌来,如何高效、准确地将它们分发到全国各地的配送站(微服务)?这正是Spring Cloud Gateway要解决的问题------作为微服务架构的"总入口",它负责接收所有外部请求,并根据规则进行路由、过滤和安全控制。
深度解析:核心组件与代码示例
1. 路由(Route)------ 分拣流水线
路由是网关的基本单元,定义了请求从何而来,到哪里去。就像分拣线上的一条条通道,决定包裹的流向。
java
// 配置文件方式
gateway:
routes:
- id: user-service-route
uri: lb://user-service # 使用负载均衡访问user-service
predicates:
- Path=/api/users/** # 当请求路径匹配/api/users/**时,进入此通道
filters:
- StripPrefix=2 # 过滤器:剥离前2级路径前缀
2. 断言(Predicate)------ 分拣规则
断言决定了一个请求是否能被当前路由处理,如同分拣规则(如目的地、重量、尺寸)。常见的Path
、Header
、Query
断言可以组合使用。
java
// Java代码配置方式@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("order_route", r -> r.path("/api/orders/**")
.and().header("X-Auth-Token") // 必须包含特定Header
.uri("lb://order-service"))
.build();
}
3. 过滤器(Filter)------ 包裹处理站
过滤器在请求被路由前或后执行,用于修改请求或响应。StripPrefix=2
意味着将/api/users/get/1
转发给user-service时,路径变为/get/1
,避免服务端重复配置路径。
要点总结
- 核心三要素:Route(目的地), Predicate(规则), Filter(加工)。
- 性能优越:基于Netty异步非阻塞模型,性能远超Zuul。
- 动态配置:结合Spring Cloud Config或Nacos可实现路由规则热更新,无需重启网关。