欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

webflux-如何使用netty处理请求

时间:2023-07-09
前言

不知道从哪个版本起,spring推出了webflux框架,内置netty处理http请求,代替原有的tomcat内置服务器。那么webflux的基本概念和原理又是什么呢?

阅读源码的一般方法

准备源码

从spring initializr创建样板项目,并添加如下依赖。

implementation 'org.springframework.boot:spring-boot-starter-actuator'implementation 'org.springframework.cloud:spring-cloud-starter'implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'implementation 'org.springframework.cloud:spring-cloud-starter-gateway'implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'implementation 'org.springframework.security:spring-security-oauth2-jose'implementation group: 'io.reactivex', name: 'rxjava-reactive-streams', version: '1.2.1'testImplementation 'org.springframework.boot:spring-boot-starter-test'implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'implementation 'com.google.code.findbugs:jsr305:3.0.2'

gateway和security是使用webflux的典型场景,所以添加gateway和security依赖一起来看。

继承关系图 WebHandler


处理web请求,这里的重点是DispatcherHandler,分发处理器。类似webmvc的DispatcherServlet。

HttpHandler


http请求处理器,reactor.netty.http.server.HttpServer的所有请求会转发到这个处理器。重点关注HttpWebHandlerAdapter。

WebFilter


请求过滤器。

WebFilterChainProxy是一种特殊的过滤器,内部维护了一个SecurityWebFilterChain列表。spring-security的所有认证和授权逻辑都维护在这个特殊的WebFilter(WebFilterChainProxy)中。

WebExceptionHandler


异常处理器。

HandlerMapping


处理器映射,查找能够处理请求的处理器。普通webflux控制器程序终点关注RequestMappingHandlerMapping,gateway程序重点关注RoutePredicateHandlerMapping,函数式程序终点关注RouterFunctionMapping。

HandlerAdapter


处理器适配器,处理请求并得到统一结果HandlerResult。同样,普通webflux控制器程序终点关注RequestMappingHandlerAdapter,gateway程序重点关注SimpleHandlerAdapter,函数式程序终点关注HandlerFunctionAdapter。

HandlerResultHandler


结果处理器,将结果写到应答中,包含数据转换,编码等逻辑。

RouteDefinitionLocator


路由定义定位器,在程序中负责发现路由逻辑。主要有DiscoveryClientRouteDefinitionLocator,从注册中心发现路由和PropertiesRouteDefinitionLocator,从配置文件发现路由。

GlobalFilter


处理gateway请求的过滤器,其中有处理负载均衡逻辑的LoadBalancerClientFilter(10100)和处理转发逻辑的NettyRoutingFilter(Ordered.LOWEST_PRECEDENCE)。

组合关系图 ReactiveWebServerApplicationContext

reactor.netty.http.server.HttpServer和org.springframework.http.server.reactive.HttpHandler通过ReactiveWebServerApplicationContext.ServerManager桥接在一起。

DispatcherHandler


分发处理器,包含消息的路由,解码处理,编码应答,异常处理等流程。

spring-cloud-gateway的主要逻辑集中在org.springframework.cloud.gateway.handler.FilteringWebHandler,内置多个全局过滤器以及单个路由相关的过滤器,从注册中心找到服务实例,并把请求负载均衡转发到这些实例上。

WebFilterChainProxy


security过滤器代理,包含认证、授权等逻辑。

spring-security可以针对不同的请求采用不同的认证方式,由ServerWebExchangeMatcher来判定请求使用哪个过滤器列表List

WebFilter的处理要先于WebHandler,所以security的逻辑要先于gateway。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。