建设网站教程,广告设计公司核心优势,杭州网站建设unohacha,更新网站 seoGateWay系列
【SpringCloud】-GateWay网关 一、背景介绍
当一个请求来到 Spring Cloud Gateway 之后#xff0c;会经过一系列的处理流程#xff0c;其中涉及到路由的匹配、过滤器链的执行等步骤。今天我们来说说请求经过 Gateway 的主要执行流程和原理是什么吧
二、正文 …GateWay系列
【SpringCloud】-GateWay网关 一、背景介绍
当一个请求来到 Spring Cloud Gateway 之后会经过一系列的处理流程其中涉及到路由的匹配、过滤器链的执行等步骤。今天我们来说说请求经过 Gateway 的主要执行流程和原理是什么吧
二、正文
下面这张图相信很多学习Gateway的小伙伴都见过的图在讲述源码之前我们先宏观的对每一部分在回顾回顾这样对于之后深入细节起到指导 Gateway Client:发送请求到 Spring Cloud Gateway 的客户端 Gateway Handler Mapping:是处理请求的组件负责将请求映射到相应的处理器。处理请求将被路由到哪个路由规则从而选择对应的过滤器链 Gateway Web Handler:实际处理请求的组件会依次执行过滤器链对请求进行处理 Gateway Filter:过滤器链由多个过滤器组成每个过滤器执行一些特定代码逻辑 Proxied Service被代理的服务当执行完过滤器链之后会将请求转发到具体的目标服务 1、路由查找和匹配
根据请求的信息将请求与配置的路由规则进行匹配。Gateway会遍历所有的路由规则根据路由规则匹配符合的路由通过路由的谓词逐个遍历路由找到第一个匹配的路由并进行一些额外的处理如记录日志和验证路由。 其中对每个路由使用 filterWhen 操作符其中 r.getPredicate().apply(exchange) 会应用路由的谓词Predicate来检查当前请求是否匹配该路由。如果匹配成功则保留该路由否则过滤掉。 路由规则匹配的路径、Predicates断言……
2、创建 Gateway 过滤器链
目的通过上一步我们找到了匹配的路由规则Gateway会将多个过滤器组成一个过滤器链每个过滤器都有自己负责的逻辑通过过滤器可以对请求进行修改、验证、记录日志等等 在我分享的文章中也提到了GateWay包含的一些GlobalFilter全局过滤器
下面我们先来看看Gateway是如何组成过滤器链的吧
将全局过滤器和路由过滤器按照优先级排序然后创建并执行过滤器链。过滤器链是 Spring Cloud Gateway 中请求处理的核心机制之一通过过滤器链可以在请求进入 Gateway 时进行一系列的预处理、转换、验证或者日志记录等操作以及在响应返回时进行一系列的后处理操作 步骤
获取路由信息和过滤器会从配置文件中获取过滤器列表合并全局过滤器和路由过滤器排序过滤器链在配置文件中会设置order等级此时会根据等级去排序如果启用了 DEBUG 级别的日志会输出排序后的过滤器列表创建并执行过滤器链
过滤器链组装完毕接下来我们就该去分别执行每一个过滤器了下面我们来看看每个filter方法是如何执行的
3、逐个执行过滤器
借鉴网上的一张图片下面的图片描述了具体的执行流程 思想逐个调用过滤器链的filter方法其中有个过滤器需要我们着重关注 loadbalance 将service通过ribbon负载均衡器转换成实际微服务下游地址后面我也会着重对这一部分讲述
①、根据负载均衡的规则选择服务实例
当通过路由到服务的请求时该过滤器会被调用确保请求被正确地路由到具体的服务实例上 核心代码是final ServiceInstance instance choose(exchange);这一句内部通过loadBalancer去截取lb://后面的服务名称
gateway通过和ribbon获取服务实例 目的选择服务实例在默认情况下Ribbon会使用RoundRobin轮询作为默认的负载均衡策略
②、替换到下游服务地址
uri是请求的地址instance是真正通过ribbon获取到的代理地址将请求转发到真正的instance地址上 4、路由转发
通过过滤器链的filter之后所有的请求都会转发到具体某个服务上
5、请求返回
当我们的目标服务执行完对应的逻辑处理之后会将响应返回给GatewayGateway也可以对相应做一些记录日志或者添加响应头等操作 三、总结
我们发送的一个个请求经过 Gateway 的整体流程从接收请求到路由匹配、过滤器链的执行再到最终的响应返回给客户端中间做了很多我们不知道的动作通过分析源码了解其中奥秘才知道Ribbon是如何和Gateway结合使用的
如果有想要交流的内容欢迎在评论区进行留言如果这篇文档受到了您的喜欢那就留下你点赞收藏评论脚印支持一下博主~