网关 Spring Cloud Gateway - API 调用的组织者

本文探讨了Spring Cloud Gateway作为API调用的组织者,解释了其核心概念,包括Route、Predicate和Filter。通过一个网关项目演练,展示了如何创建、配置路由,实现负载均衡,以及利用断言Predicate进行条件匹配。文章还介绍了内置过滤器如AddRequestHeader和RedirectTo,强调了Spring Cloud Gateway在微服务架构中的重要角色。
摘要由CSDN通过智能技术生成

引言:网关为何而生?

三皇五帝时期,中原洪水泛滥,大禹率领民众,对洪水进行疏导,使每个水系都有各自的流向,最终完成了治水大业。

我在玩《穹之扉》水坝机关这里的时候,搞了好久才完成,每个机关控制各自水道的流向,最终只要每条水道流通就能完成了。

言归正传,在一个错综复杂的大型微服务系统里,各个服务间的 API 调用将是一个巨大的考验,每个调用者都得在记录每个微服务的地址再分别去调用,还有服务认证问题、跨域问题等等。

如果有一个类似于疏通水系的中间件,每个客户端调用都从它这里走,而它能够统一指挥调度请求的流向,那 API 请求的问题将会变得清晰、简单、高效!

网关就为此而生了。

网关还可以隐藏服务名称、限流以及许多其他有用的事情。

Spring Cloud Gateway

Spring Cloud Gateway 是网关的一种,它可精确控制 API 层,集成 Spring Cloud 服务发现和客户端负载均衡解决方案,以简化配置和维护。

Spring Cloud Gateway 不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如: 安全 , 监控 和 限流 。

核心概念

Route

Route是网关的基础元素,表示一个具体的路由信息。当请求到达网关时,由 Gateway Handler Mapping 通过 断言 进行路由匹配,就是 Mapping , 当断言为真时,匹配的路由。

路由有以下几个部分组成:

id
uri
order
predicate
filter

Predicate

前面说过,断言 predicate 是 Route 的组成部分之一。

Predicate 是 Java 8 中提供的一个函数:

Predicate 函数式接口的主要作用就是提供一个 test(T t) 方法,接受一个参数返回一个布尔类型,Predicate 在进行一些判断的时候非常常用。

在 Gateway 中,输入类型是 ServerWebExchange ,它可以让开发人员匹配来自 HTTP 的请求,比如 请求头 或者 请求参数 。简而言之,它就是匹配条件。

Filter

Filter 是 Gateway 中的过滤器,可以在请求发出的前后做一些业务上的处理。

将以上三个核心点连起来看,当用户发出请求到达 Gateway , Gateway 会通过一些匹配条件,定位到真正的服务节点,并在这个转发过程前后,进行一些及细化控制。其中 Predicate 就是我们匹配的条件,而 Filter 可以理解为一个拦截器,有了这两个点,再加上目标 uri ,就可以实现一个具体的路由了。

工作原理

来看一下, Spring Cloud Gateway 的工作原理图:

客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则该请求就会被发送到网管 Web 处理程序,此时处理程序运行特定的请求过滤器链。

过滤器之间用虚线分开是因为过滤器可能会在发送代理请求的前后执行逻辑。所有 pre 过滤器的逻辑先执行,然后执行代理请求,代理请求完成后,执行 post 过滤器逻辑。

具体的执行流程:

  1. Gateway Client 向 Gateway Server 发送请求;
  2. 请求首先会被 HttpWebHandlerAdapter 进行提取组装成网关上下文;
  3. 然后网关的上下文会传递到 DispatcherHandler ,它负责将请求分发给 RoutePredicateHandlerMapping ;
  4. RoutePredicateHandlerMapping 负责路由查找,并根据路由断言判断路由是否可用;
  5. 如果过断言成功,由 FilteringWebHandler 创建过滤器链并调用;
  6. 请求会一次经过 PreFilter--微服务--PostFilter 的方法,最终返回响应。

Spring Cloud Gateway 网管项目演练

创建网关服务

创建一个 Module gateway-service 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值