网关的执行流程
- HttpWebHandlerAdapter: 构建组装网关请求的上下文。
- DispatcherHandler:所有请求的分处理器,负责分请求到对应的处理器。
- RoutePredicateHandlerMapping:路由断言处理器,用于路由的查找,以及找到路由后返回对应的WebHandler,
DispatcherHandler会依次遍历HandlerMapping集合进行处理 - FilteringWebHandler:创建过滤器链,使用Filter链表处理请求。
RoutePredicateHandlerMapping找到路由后返回对应的FilteringWebHandler后对请求进行处理。
FilteringWebHandler 负责组装Filter链表并调用Filter处理请求。
DispatcherHandler的handler执行顺序
- 校验 handlerMapping
- 遍历 Mapping 获取 Mapping 对应的 handler(此处会找到gateway对应的 RoutePredicateHandlerMapping),
并通过 RoutePredicateHandlerMapping 获取handler(FilteringWebHandler)。 - 通过 handler 对应的 HandlerAdapter 对 handler 进行调用(Gateway使用 SimpleHandlerAdapter),
即 FilteringWebHandler 于 SimpleHandlerAdapter 对应。
RoutePredicateHandlerMapping 执行分析
- RoutePredicateHandlerMapping 的执行顺序是先通过路由定位器获取全部路由。
- 然后通过路由断言过滤掉不匹配的路由信息,找到路由信息后将路由信息设置到上下文中。
- 最后返回 Gateway 固定的 webHandler,即 FilteringWebHandler。
FilteringWebHandler 源码分析
- FilteringWebHandler 的执行顺序先构建一个包含全局过滤器的集合。获取上下文中的路由信息,
然后将路由里的过滤器添加到集合中,对过滤器集合进行排序。 - 通过过滤器集合组装 Filter 链并调用 Gateway 默认的Filter链,最后通过过滤器来处理请求并转发到代理服务中。
- 通过 new DefaultGatewayFilterChain(combined).filter(exchange) 创建Gateway,默认过滤器链。