gateway处理请求逻辑(netty)
2021-06-15 19:30:21 0 举报
gateway请求转发源码流程图
作者其他创作
大纲/内容
r.getPredicate().apply(exchange);这里匹配成功后,会调用flux的next方法只返回第一个匹配成功的(看源码),并且此时就已经将FilteringWebHandler设置到mono对象中了,这是这一步的核心逻辑
获取配置的断言和过滤器,生成路由对象
org.springframework.cloud.gateway.config.PropertiesRouteDefinitionLocator#getRouteDefinitions
org.springframework.web.reactive.result.SimpleHandlerAdapter#handle
开始执行handle
org.springframework.web.reactive.handler.AbstractHandlerMapping#getHandlerInternal(exchange)
org.springframework.web.reactive.DispatcherHandler#invokeHandler用来执行FilteringWebHandler
org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping#lookupRoute(exchange)
org.springframework.web.reactive.DispatcherHandler#handle
org.springframework.web.reactive.handler.AbstractUrlHandlerMapping#getHandlerInternal
第一步:获取路由
org.springframework.cloud.gateway.handler.FilteringWebHandler.DefaultGatewayFilterChain#filter,我们配置的过滤器在这里被调用
org.springframework.web.reactive.result.method.AbstractHandlerMethodMapping#getHandlerInternal
ribbon解析lb
org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#convertToRoute
org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping#getHandlerInternal来获取FilteringWebHandler
我们只分析从yml配置文件中编写的路由属性
org.springframework.web.reactive.handler.AbstractUrlHandlerMapping#lookupHandler主要工作:检查域名后面的URL,并且将URL设置到exchange参数对象的属性中
org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getRoutes
org.springframework.cloud.gateway.filter.NettyRoutingFilter#filter这里进行转发请求的
org.springframework.cloud.gateway.handler.FilteringWebHandler#handle这一步将配置文件中的过滤器取出来再添加全局过滤器,形成过滤器链
所有请求都会到达这里
public Mono<Void> handle(ServerWebExchange exchange) { if (logger.isDebugEnabled()) { ServerHttpRequest request = exchange.getRequest(); logger.debug(\"Processing \" + request.getMethodValue() + \" request for [\" + request.getURI() + \"]\
第二步:匹配断言
org.springframework.cloud.gateway.filter.LoadBalancerClientFilter#filter这里进行解析配置文件配置 的lb://微服务名,剩下的就是ribbon进行选择服务器的过程
浏览器发起请求
mapping -> mapping.getHandler(exchange)
AsyncPredicate<ServerWebExchange> predicate = combinePredicates(routeDefinition);\t\tList<GatewayFilter> gatewayFilters = getFilters(routeDefinition);\t\treturn Route.async(routeDefinition).asyncPredicate(predicate)\t\t\t\t.replaceFilters(gatewayFilters).build();
0 条评论
下一页
为你推荐
查看更多