spring cloud gateway 源码一总体执行流程

gateway 源码

gateway 执行流程

  • RouteLocator 初始化配置
  • DispatcherHandler 请求分发
  • RoutePredicateHandlerMapping 路由匹配断言
  • FilteringWebHandler 过滤器链支持前置后置

RouteLocator

RouteLocator 与 RouteDefinitionLocator:相当于 Bean 和 BeanDefinition 的关系

RouteDefinitionRouteLocator:依赖 RouteDefinition 通过 convertToRoute 将 definition 转换为 route
    GatewayProperties properties
	List<GatewayFilterFactory> gatewayFilters 过滤器工厂类
	List<RoutePredicateFactory> predicates      谓词/断言工厂类
	RouteDefinitionLocator routeDefinitionLocator   路由定义定位器
	ConversionService conversionService 转换服务 
CachingRouteLocator 装饰 CompositeRouteLocator
CompositeRouteLocator 组合 List<RouteLocator> 即包括 RouteDefinitionRouteLocator
  • RouteDefinitionLocator的职责是将各种配置源的配置数据转化成RouteDefinition,而RouteLocator的职责是把RouteDefinition转化成Route
RouteDefinitionRouteLocator 类
// RouteDefinition转化成Route
@Override
public Flux<Route> getRoutes() {
    //获取到所有的RouteDefinition
    return this.routeDefinitionLocator.getRouteDefinitions()
            //遍历转换成对应的Route信息
            .map(this::convertToRoute)
            //TODO: error handling 异常处理
            .map(route -> {
                if (logger.isDebugEnabled()) {
                    logger.debug("RouteDefinition matched: " + route.getId());
                }
                return route;
            });
}

convertToRoute功能,谓词组装和过滤器组装

//获取routeDefinition中的Predicate 
//(通过combinePredicates方法)
// 不同的谓词器 and 短路操作 predicate = predicate.and(found); 
// lookup 方法将 PredicateDefinition 转换为 Predicate 即通过 RoutePredicateFactory

//获取routeDefinition中的GatewayFilter
//(通过gatewayFilters方法向下 loadGatewayFilters 方法通过 GatewayFilterFactory)
//build 路由信息
private Route convertToRoute(RouteDefinition routeDefinition) {
    //获取routeDefinition中的Predicate信息
	AsyncPredicate<ServerWebExchange> predicate = co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值