上一部分分享了SCG的起始原理,该原理主要分析了SCG如何在Weblfux的整体过程中切入其自身的开始和初始化。在本文中,我们将重点介绍Webflux dispatcherHandler的三个主要组成部分,并深入讨论更多内容,并在深度上进行更深入的讨论。SCG谓词的实施原理。其中,RoutePredicateHandLermapping被实现为DispatcherHandler,从一开始就接管了请求。
作为前端控制器设计模式的实现,dispatcherHandler和webFlux中的springMVC中的dispatcherserv与scg的集中访问点完全相同,或者是基于WebFlux的所有系统,所有请求均安排byatchatherhandler。如上图所示,有三个主要组成部分的dispatcherHandler(下面将缩写为DH)。
上面的活动图清楚地表达了处理逻辑。如果不愉快,请查看核心代码:
所有逻辑都在磁通代码的最后一行中。对于不熟悉反应性代码的学生,我将稍微解释该代码的含义:
这是一个类似的逻辑但更简单的示例。
在理解整体思维之后,让我们看一下处理的实现:
WebFlux提供了三个HM,相应图中的蓝色类:
SCG实现了自己的操作:RutePredicateHandermapping(rphm)。从这里,SCG接管了请求整个处理逻辑的WebFlux。随后的路线规则匹配和Netty客户对上游的电话已埋葬。
首先查看WebFlux中提供的三个手工程序。启动时,WebFluxConfigurationUpport将初始化这三种豆子,然后Springboot会自动将其注入dispatcherHandler。
路由功能图
对于函数 - 类型断点的路由,如果他匹配,请求将移交给路由功能处理处理,这是更抽象的。例如:
然后,当请求 /helloflux时,DH的第一阶段将匹配RouterFunction映射以获取此路由功能对象处理。如果您有兴趣,可以检查它。代码链接:RouterConfig.java
simpleurlhandlermapping
它用于显示注册的URL模式匹配。这里没有例子。早期编写SpringMVC代码时,通常会编写类似的配置。
requestMappingHandLermapping
基于该项目中最常用的路由控制,例如:
让我们详细分析它。启动时,我们将将与上述代码类似的所有代码分析到requestMappingInfo对象中,并在映射注册对象中注册:
requestMappingInfo对象表示详细的请求映射规则或路由规则。从上面的类图中,很容易找到他包括请求路径,参数,标题和方法。因此,我们可以查看一个更复杂的示例。您不仅需要请求匹配/Hello的道路,还需要使用请求参数foo = bar,a token = wls header和content-type to text/playin
因此,根据此hellocontroller.java的说法,我们将获得以下映射规则的注册信息:
首先,Pathlookup具有一个 /Hello映射,该映射映射到两个requestMappingInfo对象,一个是简单的Hello,另一个有多个条件。
其次,两个requestMappingInfo对象被映射到handlemethod(即,hellocontroller#hello,hellocontroller#hellowithmorouteconditions)
显然,它在执行简单 /Hello请求时匹配并执行了Hellocontroller#Hello方法
当您带来更准确的条件时,在Hellocontroller比赛中使用了两种方法,但最好的匹配是HellowithMorouteConditions:
这是最佳匹配规则,相应的代码332,333。
最后,让我们研究SCG实施的RoutePredicateHandermapping
RoutePredicateHandermapping集成了一个路由器对象。根据上一篇文章的“ SCG的启动原则”共享,我们知道SCG的路由配置将被初始化,并可以由RouteLecator对象找到。此外,他还将最多的WebHandler对象与FelteringWebhandler对象集成在一起。这些豆是在gatewayautoconfiguration中自动创建和初始化的。RoutePredicateHandermagping#gethandlerinternal
该代码仍然很清楚。第一步LookUpRoute找到所有第一个谓词#应用,是true的true。第二步是慢慢地存在于ServerWebexChange属性中,然后返回WebHandler(这是SCG的FilteringWebHandler对象)。他的手柄方法由dispatcherHandler调用。我们输入FelteringWebHandler:
他是执行SCG的过滤链,这将是另一个方逻辑。必须将特定的开发放在以下文章中。本文可以清楚地表明,当其中一个被称为NetTyRoutingFilter时,Netty HTTPClient将向上游启动真实的请求。在获得上游结果后,返回下游。
以上是本文中共享的所有内容。
原始:https://juejin.cn/post/7097977648554442760