Open Maybrittnelson opened 5 years ago
那么实现GatewayFilter接口的filter什么时候执行? 举个🌰
### filters
spring.cloud.gateway.routes[0].filters[0].name=Hystrix
spring.cloud.gateway.routes[0].filters[0].args.name=user-service-provider
spring.cloud.gateway.routes[0].filters[0].args.fallbackUri= forward:/fallback
spring.cloud.gateway.routes[0].filters[1].name=StripPrefix
spring.cloud.gateway.routes[0].filters[1].args.parts=2
答案是 Hystrix先执行,order分别是多少,Hystrix(1)、StripPrefix(2)
org.springframework.cloud.gateway.handler.FilteringWebHandler#handle debug查看排序后的combined,就可以知道filters的具体排序
exchange.getAttributes().put(WEIGHT_ATTR, weights);
weights.put(group, routeId);
Map<String, String> weights = exchange.getAttributeOrDefault(WEIGHT_ATTR,
Collections.emptyMap());
String routeId = exchange.getAttribute(GATEWAY_PREDICATE_ROUTE_ATTR);
// all calculations and comparison against random num happened in
// WeightCalculatorWebFilter
String group = config.getGroup();
if (weights.containsKey(group)) {
String chosenRoute = weights.get(group);
return routeId.equals(chosenRoute);
}
AdaptCacheBodyGlobalFilter
GatewayMetricsFilter
WebsocketRoutingFilter
NettyWriteResponseFilter
ForwardPathFilter
RouteToRequestUrlFilter
LoadBalancerClientFilter
NettyRoutingFilter
ForwardRoutingFilter
NoLoadBalancerClientFilter
WebClientHttpRoutingFilter
WebClientWriteResponseFilter