当前位置: 首页 > news >正文

海报制作网站免费wordpress如何创建项目

海报制作网站免费,wordpress如何创建项目,备案网站建设方案书模板,公司开发个网站Spring Cloud Gateway 路由构建器的源码分析 文章目录 1. 路由构建器的入口2. 创建路由规则3. 设置路由规则和属性4. 路由过滤器的设置5. 构建和获取路由规则:6. 实例化路由构建器:8. 路由构建器的源码分析8.1 RouteLocator接口8.2 RouteLocatorBuilder…

Spring Cloud Gateway 路由构建器的源码分析

文章目录

  • 1. 路由构建器的入口
  • 2. 创建路由规则
  • 3. 设置路由规则和属性
  • 4. 路由过滤器的设置
  • 5. 构建和获取路由规则:
  • 6. 实例化路由构建器:
  • 8. 路由构建器的源码分析
    • 8.1 RouteLocator接口
    • 8.2 RouteLocatorBuilder接口
    • 8.3 DefaultRouteLocator实现
    • 8.4 RouteDefinitionRouteLocator实现

Spring Cloud Gateway的路由构建器是用于创建和配置路由的核心组件之一。它允许你以编程方式定义路由规则,并设置各种路由属性和过滤器。下面是Spring Cloud Gateway路由构建器的源码分析:
在这里插入图片描述

1. 路由构建器的入口

  • 路由构建器的入口是RouteLocatorBuilder类,它是一个构建器模式的入口类。
  • 通过RouteLocatorBuilder,你可以创建和配置路由规则。

2. 创建路由规则

  • 使用RouteLocatorBuilderroutes()方法创建一个RouteLocator实例,用于定义路由规则。
  • RouteLocatorBuilderroutes()方法返回一个Builder对象,通过该对象可以进行路由规则的设置和配置。

3. 设置路由规则和属性

  • Builder对象提供了一系列方法用于设置路由规则和属性。
  • 可以使用Builderroute()方法设置路由规则,例如指定请求路径、目标URI等。
  • 可以使用Builder的各种属性方法设置路由的附加属性,例如请求谓词、过滤器等。

4. 路由过滤器的设置

  • 通过Builderfilters()方法可以设置路由过滤器。
  • 可以使用过滤器工厂类(如GatewayFilterFactory)提供的方法创建过滤器,并将其添加到路由规则中。

5. 构建和获取路由规则:

  • 使用Builderbuild()方法构建RouteLocator实引言例,生成最终的路由规则。
  • RouteLocator表示完整的路由规则集合,可以通过该实例获取所有配置好的路由规则。

6. 实例化路由构建器:

  • 要实例化RouteLocatorBuilder,可以通过依赖注入或创建一个新的实例。
  • 通常,可以在Spring Boot的配置类中使用@Bean注解创建一个RouteLocatorBuilder的实例。

8. 路由构建器的源码分析

8.1 RouteLocator接口

这是一个功能接口,定义了一个方法getRoutes(),该方法返回一个Publisher,当订阅时,发布所有的Route集合。

8.2 RouteLocatorBuilder接口

RouteLocatorBuilder是Spring Cloud Gateway中用于构建RouteLocator的工具类,它提供了一种简洁、易读的方式来定义路由。RouteLocatorBuilder的主要方法是routes(),返回一个RoutesLocatorBuilder.Builder对象,我们可以在此对象上定义特定的路由。

RouteLocatorBuilder的成员变量包括:

  1. List<RoutePredicateFactory>:这是一个负责创建路由断言的工厂列表,断言用来判断请求是否满足特定条件。
  2. List<RouteFilterFactory>:这是一个负责创建过滤器的工厂列表,过滤器用来对满足断言的请求进行处理。

RouteLocatorBuilder的主要方法包括:

  1. routes():这个方法返回一个RouteLocatorBuilder.Builder对象,你可以在这个对象上使用诸如route()方法来定义路由。
  2. route(RouteLocatorBuilder.BuilderSpec spec):这个方法是RouteLocatorBuilder.Builder的一个方法,它可以接受一个RouteLocatorBuilder.BuilderSpec参数,然后根据这个参数来定义一个路由。你可以在这个方法的参数中定义断言和过滤器。

注意,RouteLocatorBuilder并不负责加载和转换路由定义,这是DefaultRouteLocator的职责。RouteLocatorBuilder只是提供了一个方便的方式来定义路由。

这里是一个简单的示例来展示如何使用RouteLocatorBuilder来定义路由:

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("path_route", r -> r.path("/get").uri("http://httpbin.org")).build();
}

在此示例中,我们定义了一个路由,该路由将所有路径为"/get"的请求路由到"http://httpbin.org"。

8.3 DefaultRouteLocator实现

DefaultRouteLocator 是 Spring Cloud Gateway 的默认路由定位器实现,负责加载和转换路由定义。它的源代码比较复杂,这里只简要概述其主要功能和工作原理。

DefaultRouteLocator的核心成员变量包括:

  1. RouteDefinitionLocator:用于从各种来源(例如内存,数据库,配置文件等)获取路由定义。
  2. List<RoutePredicateFactory>:用于根据路由定义创建断言,断言用于判断请求是否满足特定条件。
  3. List<RouteFilterFactory>:用于根据路由定义创建过滤器,过滤器用于处理满足断言的请求。

DefaultRouteLocator的主要方法是:

  1. getRoutes():返回所有有效的路由。该方法首先调用RouteDefinitionLocator来获取所有的路由定义,然后对每一个路由定义创建一个断言和一组过滤器,并将它们封装成一个Route对象。

这是一个简单的 getRoutes() 方法的实现流程:

public Flux<Route> getRoutes() {// 从RouteDefinitionLocator获取所有路由定义Flux<RouteDefinition> routeDefinitionFlux = this.routeDefinitionLocator.getRouteDefinitions();// 转换每个路由定义为Route对象return routeDefinitionFlux.map(routeDefinition -> {// 创建断言Predicate<ServerWebExchange> predicate = this.getPredicate(routeDefinition);// 创建过滤器链List<GatewayFilter> gatewayFilters = this.getFilters(routeDefinition);// 生成并返回Route对象return new Route(routeDefinition.getId(), predicate, gatewayFilters, routeDefinition.getUri());});
}

8.4 RouteDefinitionRouteLocator实现

RouteDefinitionRouteLocator是Spring Cloud Gateway中的一个核心类,它的主要职责是提供路由定位的功能。它会从RouteDefinitionLocator中获取所有的RouteDefinition,然后将这些RouteDefinition转换成Route对象,以供后续的路由匹配和过滤使用。

简单的RouteDefinitionRouteLocator类的源码解析:

public class RouteDefinitionRouteLocator implements RouteLocator {private final RouteDefinitionLocator routeDefinitionLocator;private final List<GatewayFilterFactory> gatewayFilters;private final List<RoutePredicateFactory> routePredicates;private final RouteFactory routeFactory;public RouteDefinitionRouteLocator(RouteDefinitionLocator routeDefinitionLocator,List<GatewayFilterFactory> gatewayFilters,List<RoutePredicateFactory> routePredicates,RouteFactory routeFactory) {this.routeDefinitionLocator = routeDefinitionLocator;this.gatewayFilters = gatewayFilters;this.routePredicates = routePredicates;this.routeFactory = routeFactory;}@Overridepublic Flux<Route> getRoutes() {return this.routeDefinitionLocator.getRouteDefinitions().flatMap(this::convertToRoute);}private Mono<Route> convertToRoute(RouteDefinition routeDefinition) {List<Predicate<ServerWebExchange>> predicates = this.routePredicates.stream().map(factory -> factory.apply(routeDefinition.getId())).collect(Collectors.toList());List<GatewayFilter> filters = this.gatewayFilters.stream().map(factory -> factory.apply(routeDefinition.getFilters())).collect(Collectors.toList());return this.routeFactory.createRoute(routeDefinition, predicates, filters);}
}

在这个类中,我们可以看到以下重要部分:

  1. 构造函数:它接收一个RouteDefinitionLocator,一个GatewayFilterFactory列表,一个RoutePredicateFactory列表,和一个RouteFactory。这些都是从Spring容器中注入的。

  2. getRoutes()方法:该方法通过调用RouteDefinitionLocator.getRouteDefinitions()来获取所有的RouteDefinition,然后通过flatMap操作符将每个RouteDefinition转换为一个Route对象。

  3. convertToRoute(RouteDefinition routeDefinition)方法:这个方法会将一个RouteDefinition转换为一个Route对象。转换过程中,会使用RoutePredicateFactory列表和GatewayFilterFactory列表来创建路由断言和过滤器。

这个类的主要作用就是将路由定义RouteDefinition转换成实际可用的路由Route,以供后续的路由匹配和过滤使用。

RouteDefinitionRouteLocator类并不是Spring Cloud Gateway的官方源码,上面的代码只是一个简化版本,用来解释RouteDefinitionRouteLocator工作原理。在实际的Spring Cloud Gateway源码中,这个类的名字是RouteDefinitionRouteLocator,并且它的实现要复杂得多,包括处理各种异常情况,处理各种路由配置选项等等。

http://www.yayakq.cn/news/971349/

相关文章:

  • 同一产品做多个网站江苏南京最新通告
  • 色和尙做爰网站昆明几大网站
  • wordpress作品主题兰州做网络优化
  • 社交网站用户体验飞飞cms悠悠电影网站
  • 贵州做网站怎么推广深圳手机网站设计公司
  • 自助建手机网站免费建设网站企业排行
  • 做网站都需要什么贴吧莆田网站开发公司
  • 网站建设费一般多少钱如何套用wordpress的源码
  • 织梦手机网站如何调用网站建设与管理初级教学
  • 灵溪网站建设徐州金桥建设监理有限公司网站
  • 江西建设厅网站官网定制研发服务
  • 做百度网站需不需要备案湛江网站建设方案策划
  • 放心的网站设计制作北京宣传册设计制作公司
  • 免费软件下载网站入口做视频网站需要
  • 阿里巴巴国际站首页东莞做网络推广的公司
  • 工信部的网站备案信息杭州网络网站建设
  • 石家庄做网站最好的公司哪家好网店seo
  • 如何将自己做的网站上传全球设计网站
  • 自己买一个服务器怎么做网站如何上传自己做的网站
  • 犀牛网站建设做网站搞流量
  • 目前做定制产品的网站郑州网站建设蝶动
  • 栖霞酒店网站设计价格做网站网站的人是怎么被抓的
  • 广西旅游 网站建设品牌设计模板
  • 公司网站建站软件网站建设柒金手指下拉二一
  • 欧米茄官网网站深圳前十网站建设公司
  • 过年做啥网站致富外贸网站开发推荐
  • 深圳俄语网站建设做前端网站用什么软件写代码吗
  • 什么网站可以做注册任务用asp.net做校园网站
  • 网站开发培训 价格网址设计公司
  • 青岛网景互联网站建设公司应用商店aso优化