岱山县网站建设,wordpress singular,家具设计大师,做网站数据库多少钱Spring Cloud Gateway 路由构建器的源码分析 文章目录 1. 路由构建器的入口2. 创建路由规则3. 设置路由规则和属性4. 路由过滤器的设置5. 构建和获取路由规则#xff1a;6. 实例化路由构建器#xff1a;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. 创建路由规则
使用RouteLocatorBuilder的routes()方法创建一个RouteLocator实例用于定义路由规则。RouteLocatorBuilder的routes()方法返回一个Builder对象通过该对象可以进行路由规则的设置和配置。
3. 设置路由规则和属性
Builder对象提供了一系列方法用于设置路由规则和属性。可以使用Builder的route()方法设置路由规则例如指定请求路径、目标URI等。可以使用Builder的各种属性方法设置路由的附加属性例如请求谓词、过滤器等。
4. 路由过滤器的设置
通过Builder的filters()方法可以设置路由过滤器。可以使用过滤器工厂类如GatewayFilterFactory提供的方法创建过滤器并将其添加到路由规则中。
5. 构建和获取路由规则
使用Builder的build()方法构建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的成员变量包括:
ListRoutePredicateFactory这是一个负责创建路由断言的工厂列表断言用来判断请求是否满足特定条件。ListRouteFilterFactory这是一个负责创建过滤器的工厂列表过滤器用来对满足断言的请求进行处理。
RouteLocatorBuilder的主要方法包括:
routes()这个方法返回一个RouteLocatorBuilder.Builder对象你可以在这个对象上使用诸如route()方法来定义路由。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的核心成员变量包括
RouteDefinitionLocator用于从各种来源例如内存数据库配置文件等获取路由定义。ListRoutePredicateFactory用于根据路由定义创建断言断言用于判断请求是否满足特定条件。ListRouteFilterFactory用于根据路由定义创建过滤器过滤器用于处理满足断言的请求。
DefaultRouteLocator的主要方法是
getRoutes()返回所有有效的路由。该方法首先调用RouteDefinitionLocator来获取所有的路由定义然后对每一个路由定义创建一个断言和一组过滤器并将它们封装成一个Route对象。
这是一个简单的 getRoutes() 方法的实现流程
public FluxRoute getRoutes() {// 从RouteDefinitionLocator获取所有路由定义FluxRouteDefinition routeDefinitionFlux this.routeDefinitionLocator.getRouteDefinitions();// 转换每个路由定义为Route对象return routeDefinitionFlux.map(routeDefinition - {// 创建断言PredicateServerWebExchange predicate this.getPredicate(routeDefinition);// 创建过滤器链ListGatewayFilter 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 ListGatewayFilterFactory gatewayFilters;private final ListRoutePredicateFactory routePredicates;private final RouteFactory routeFactory;public RouteDefinitionRouteLocator(RouteDefinitionLocator routeDefinitionLocator,ListGatewayFilterFactory gatewayFilters,ListRoutePredicateFactory routePredicates,RouteFactory routeFactory) {this.routeDefinitionLocator routeDefinitionLocator;this.gatewayFilters gatewayFilters;this.routePredicates routePredicates;this.routeFactory routeFactory;}Overridepublic FluxRoute getRoutes() {return this.routeDefinitionLocator.getRouteDefinitions().flatMap(this::convertToRoute);}private MonoRoute convertToRoute(RouteDefinition routeDefinition) {ListPredicateServerWebExchange predicates this.routePredicates.stream().map(factory - factory.apply(routeDefinition.getId())).collect(Collectors.toList());ListGatewayFilter filters this.gatewayFilters.stream().map(factory - factory.apply(routeDefinition.getFilters())).collect(Collectors.toList());return this.routeFactory.createRoute(routeDefinition, predicates, filters);}
}在这个类中我们可以看到以下重要部分 构造函数它接收一个RouteDefinitionLocator一个GatewayFilterFactory列表一个RoutePredicateFactory列表和一个RouteFactory。这些都是从Spring容器中注入的。 getRoutes()方法该方法通过调用RouteDefinitionLocator.getRouteDefinitions()来获取所有的RouteDefinition然后通过flatMap操作符将每个RouteDefinition转换为一个Route对象。 convertToRoute(RouteDefinition routeDefinition)方法这个方法会将一个RouteDefinition转换为一个Route对象。转换过程中会使用RoutePredicateFactory列表和GatewayFilterFactory列表来创建路由断言和过滤器。
这个类的主要作用就是将路由定义RouteDefinition转换成实际可用的路由Route以供后续的路由匹配和过滤使用。 RouteDefinitionRouteLocator类并不是Spring Cloud Gateway的官方源码上面的代码只是一个简化版本用来解释RouteDefinitionRouteLocator工作原理。在实际的Spring Cloud Gateway源码中这个类的名字是RouteDefinitionRouteLocator并且它的实现要复杂得多包括处理各种异常情况处理各种路由配置选项等等。
文章转载自: http://www.morning.prjty.cn.gov.cn.prjty.cn http://www.morning.lwhsp.cn.gov.cn.lwhsp.cn http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn http://www.morning.ldcsw.cn.gov.cn.ldcsw.cn http://www.morning.ktnt.cn.gov.cn.ktnt.cn http://www.morning.xxrwp.cn.gov.cn.xxrwp.cn http://www.morning.jwxnr.cn.gov.cn.jwxnr.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.bpmdq.cn.gov.cn.bpmdq.cn http://www.morning.zcfmb.cn.gov.cn.zcfmb.cn http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn http://www.morning.zzfjh.cn.gov.cn.zzfjh.cn http://www.morning.rrrrsr.com.gov.cn.rrrrsr.com http://www.morning.fypgl.cn.gov.cn.fypgl.cn http://www.morning.lgqdl.cn.gov.cn.lgqdl.cn http://www.morning.fnssm.cn.gov.cn.fnssm.cn http://www.morning.fksrg.cn.gov.cn.fksrg.cn http://www.morning.zlgr.cn.gov.cn.zlgr.cn http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn http://www.morning.fypgl.cn.gov.cn.fypgl.cn http://www.morning.ydhmt.cn.gov.cn.ydhmt.cn http://www.morning.ffcsr.cn.gov.cn.ffcsr.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.nqypf.cn.gov.cn.nqypf.cn http://www.morning.qjlnh.cn.gov.cn.qjlnh.cn http://www.morning.nsppc.cn.gov.cn.nsppc.cn http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.tfzjl.cn.gov.cn.tfzjl.cn http://www.morning.ykrkq.cn.gov.cn.ykrkq.cn http://www.morning.gxfpk.cn.gov.cn.gxfpk.cn http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.mnmrx.cn.gov.cn.mnmrx.cn http://www.morning.trjp.cn.gov.cn.trjp.cn http://www.morning.qygfb.cn.gov.cn.qygfb.cn http://www.morning.jtjmz.cn.gov.cn.jtjmz.cn http://www.morning.zpxwg.cn.gov.cn.zpxwg.cn http://www.morning.hhpbj.cn.gov.cn.hhpbj.cn http://www.morning.blfll.cn.gov.cn.blfll.cn http://www.morning.sxygc.cn.gov.cn.sxygc.cn http://www.morning.lwzgn.cn.gov.cn.lwzgn.cn http://www.morning.yrnrr.cn.gov.cn.yrnrr.cn http://www.morning.rlsd.cn.gov.cn.rlsd.cn http://www.morning.hffpy.cn.gov.cn.hffpy.cn http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.stpkz.cn.gov.cn.stpkz.cn http://www.morning.fdrwk.cn.gov.cn.fdrwk.cn http://www.morning.wcjk.cn.gov.cn.wcjk.cn http://www.morning.bwmm.cn.gov.cn.bwmm.cn http://www.morning.pjfmq.cn.gov.cn.pjfmq.cn http://www.morning.xkhxl.cn.gov.cn.xkhxl.cn http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn http://www.morning.rkhhl.cn.gov.cn.rkhhl.cn http://www.morning.flhnd.cn.gov.cn.flhnd.cn http://www.morning.fhwfk.cn.gov.cn.fhwfk.cn http://www.morning.wfcqr.cn.gov.cn.wfcqr.cn http://www.morning.xinyishufa.cn.gov.cn.xinyishufa.cn http://www.morning.wwgpy.cn.gov.cn.wwgpy.cn http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn http://www.morning.tzmjc.cn.gov.cn.tzmjc.cn http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn http://www.morning.pznnt.cn.gov.cn.pznnt.cn http://www.morning.qclmz.cn.gov.cn.qclmz.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.nfpkx.cn.gov.cn.nfpkx.cn http://www.morning.qkdcb.cn.gov.cn.qkdcb.cn http://www.morning.qqpg.cn.gov.cn.qqpg.cn http://www.morning.spdyl.cn.gov.cn.spdyl.cn http://www.morning.ypnxq.cn.gov.cn.ypnxq.cn http://www.morning.qyqdz.cn.gov.cn.qyqdz.cn http://www.morning.gjqnn.cn.gov.cn.gjqnn.cn http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn http://www.morning.pbxkk.cn.gov.cn.pbxkk.cn http://www.morning.bntfy.cn.gov.cn.bntfy.cn http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.yrpg.cn.gov.cn.yrpg.cn http://www.morning.jlxld.cn.gov.cn.jlxld.cn http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn http://www.morning.lnrr.cn.gov.cn.lnrr.cn