您现在的位置是:首页 > 网络趣梗网络趣梗
spring cloud gateway使用(springcloud gateway配置详解)
2022-09-25 01:46:45网络趣梗0人已围观
简介 spring cloud gateway使用(springcloud gateway配置详解),新营销网红网本栏目通过数据整理汇集了spring cloud gateway使用(springcloud gateway配置详解)相关信息,下面一起看看
spring cloud gateway使用(springcloud gateway配置详解),新营销网红网本栏目通过数据整理汇集了spring cloud gateway使用(springcloud gateway配置详解)相关信息,下面一起看看。
本文将详细分析SpringCloud Gateway是如何实现的。
架构SpringCloud Gateway(以下简称SG)基于SpringWebFlux,整体架构如下图所示:
SG定义了几个概念:
路由:路由是网关的基本构件。它由一个ID、一个目标URL、一组谓词和一组过滤器组成。当谓词为真时,意味着请求匹配相应的路由。
谓词:Java 8函数谓词。输入是由Spring框架封装的ServerWebExchange对象。开发者可以基于这个对象匹配HTTP请求的任何内容,比如请求头或者请求参数。
Filter:由特定工厂类构造的一组Spring框架提供的GatewayFilter对象。过滤器可以在处理请求或响应之前/之后对其进行修改。
体系结构SG处理请求的一般过程如下:
GatewayHandlerMapping确定相应的请求是否与路由匹配。
如果路由匹配,则请求被移交给GatewayWebHandler,处理程序调用过滤器链来处理请求:
首先,执行“预”过滤器的逻辑。
然后执行请求处理骆集。
最后,执行“后”过滤器的逻辑。
如果路线不匹配,则不执行相应的处理。
下面是一个具体的例子。
SG支持基于Java编码的配置和基于配置文件的配置。
Java编码模式配置
配置文件配置
这两种配置是等效的。
启动流程SG是基于SpringBoot构建的,启动配置可以在项目的spring.factories文件中找到。
因为涉及到很多配置,所以我们直接定位核心Bean。
handler mapping构建的处理程序映射实例是RoutePredicatehandlerMapping。
WebHandler:构造的WebHandler是FilteringWebHandler,它接收List GlobalFilter作为参数。
Route:路由构造由RouteDefinitionRouteLocator实例处理,它根据路由配置(即上面的配置文件)构建路由实例。
从上面的代码可以看出,最后,Filter、WebHandler(注意这是GlobalFilter)和Route都作为直接或间接参数传递给RoutePredicateHandlerMapping。因此,我们可以从RoutePredicateHandlerMapping中梳理出SG的执行过程。
RoutePredicateHandlerMapping是HandlerMapping的一个例子,HandlerMapping属于SpringWebFlux,这里不做解释。请自行查阅相关资料。
请求处理流程我们将结合以上配置文件和SG的具体例子来说明SG请求的处理流程:
当请求到达SG时,首先由RoutePredicateHandlerMapping处理请求(前面的流程由SpringWebFlux处理,不在讨论范围内)。
首先根据请求,从RouteLocator查询符合规则的路由,并返回路由。
返回其路由设置为exchange的属性。
返回构造期间传入的WebHandler。
执行web处理程序
从交换机的属性中获取路由。
从路由获取网关过滤器链
使用GlobalFilter进行整合和排序,以形成最终的过滤器。
横向过滤器
有些GlobalFilter有执行服务的功能,比如NettyRoutingFilter。这种过滤器负责将请求转发给相应的服务进行特定的逻辑处理。
关键流程代码
在1,根据交换从RouteLocator查询匹配的路由。
1.1根据谓词的路径匹配
2、设置路由到交换机的属性。
3、从交换的属性中获取路由。
4、从路由中获取GatewayFilter列表。
5,6,7,整合GlobalFilter和GatewayFilter,按顺序排序。
在8,执行过滤。
SG中服务的执行也是通过全局过滤器来执行的。有些全局过滤器是在SG中默认配置的,下面列出了其中一些。
Filter的具体功能这里就不细说了,不过可以自己看源代码。这里只涉及三个滤波器:
负载平衡客户端过滤器:负载平衡
NettyRoutingFilter:执行服务
NettyWriteResponseFilter:写回响应
先看LoadBalancerClientFilter。核心源代码如下:
1,如果配置的目标url不是以lb开头,将被忽略。即lb :///格式的url是负载平衡的。
2.根据交换选择相应的服务。在这里,实现了负载平衡逻辑。自己看源代码。
3、建立真实的服务请求地址
4、将请求设置为交换属性。
NettyRoutingFilter用于在LoadBalancerClientFilter之后执行服务。
1、从交换机获取服务请求。
2、构建请求参数,包括方法、url和chunkedTransfer(代码省略)
3、通过httpClient发送请求调用
4、将响应和连接信息设置为交换属性。
最后,由NettyWriteResponseFilter处理响应。
1,首先注意这个过滤器是后置过滤器,也就是处理响应。
2、从交换机获取连接。
3、从连接中获得服务响应
4、将服务响应写入网关响应。
参考SpringCloud Gateway的官方文档。
云网关源代码
门户门户篇粤语歌网(经典粤语歌汇总)
北京奥特莱斯(来北京必去的12家商场)
英雄超级放肆(还记得英雄超级放肆吗?)
龚自珍资料(清代诗人龚自珍生平事迹简介)
象牙塔是什么意思?(“象牙塔”有什么不好?)
彩色风信子(水培风信子容易养)
京字怎么读?
于吉是哪里人?(古代著名美女于吉在哪里?)
三本事业单位(我们还有哪些“三本”?)
电子酒柜(酒柜最全指南)
德州景点(德州62个景点)
玉兰油官网(玉兰油发布高端精华系列)
更多spring cloud gateway使用(springcloud gateway配置详解)相关信息请关注本文章,本文仅仅做为展示!
Tags: 网络趣事
很赞哦! ()
相关文章
留言与评论 (共有 条评论) |