Spring Cloud Gateway 概述 《重新定义Spring Cloud实战》读书笔记

小灰灰 2021-12-10 09:21 400阅读 0赞

什么是Spring Cloud Gateway

Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供简单、有效且统一的API路由管理方式,如下图所示。
在这里插入图片描述
Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。

Spring Cloud Gateway 的核心概念

网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API ,以降低管理成本和安全风险,包括协议配置、协议转发、安全策略(WAF)、防刷、流量、监控日志等功能。一般来说,网关对外暴露的URL或者接口信息,我们统称为路由信息。如果研发过网关中间件,或者使用或了解过 Zuul 的人,会知道网关的核心肯定是 Filter 以及 Filter Chain(Filter责任链)。Spring Cloud Gateway 也具有路由和 Filter 的概念。下面介绍一下 Spring Cloud Gateway 中最重要的几个概念。

  • 路由(route) 。路由是网关最基础的部分,路由信息由一个ID、一个目的url、一组断言工厂和一组 Filter 组成。如果路由断言为真,则说明请求的 url 和配置的路由匹配。
  • 断言(Predicate)。Java8中的断言函数。Spring Cloud Gateway中的断言函数输入类型是 Spring5.0 框架中的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自于Http Request中的任何信息,比如请求头和参数等。
  • 过滤器(filter)。一个标准的 Spring webFilter。Spring Cloud Gateway中的Filter分为两种类型的 Filter,分别是 Gateway Filter 和 Global Filter。过滤器Filter 将会对请求和响应进行修改处理。

Spring Cloud Gateway 的工作原理

Spring Cloud Gateway 的核心处理流程如图:
在这里插入图片描述
Gateway的客户端会向 Spring Cloud Gateway 发起请求,请求首先会被 HttpWebHandlerAdaper 进行提取组装成网关的上下文,然后网关的上下文会传递到 DispacherHandler。DispacherHandler 是所有请求的分发处理器,DispacherHandler 主要负责分发请求对应的处理器,比如将请求分发到对应 RoutePredicate-HandlerMapping (路由断言处理映射器)。路由断言处理映射器主要用于路由的查找,以及找到路由后返回对应的 FilteringWebHandler 。FilteringWebHandler 主要负责组装 Filter 链表并调用 Filter 执行一系列的 Filter 处理,然后把请求转到后端对应的代理服务处理,处理完毕后,将 Response 返回到 Gateway 客户端。

在 Filter 链中,通过虚线分割 Filter 的原因是,过滤器可以在转发请求之前处理或者接收到被代理服务的返回结果之后处理。所有的 Pre 类型的 Filter 执行完毕之后,才会转发请求到被代理的服务处理。被代理的服务把所有请求处理完毕之后,才会执行 Post 类型的过滤器。

注意:在配置路由的时候,如果不指定端口的话,http默认设置端口为80,https默认设置端口为443。Spring Cloud Gateway 的启动容器目前只支持 Netty。

发表评论

表情:
评论列表 (有 0 条评论,400人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Cloud -- GateWay

    1. 为什么需要网关 > 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务

    相关 Spring cloud gateway

    网关核心功能是路由转发,因此不要有耗时操作在网关上处理,让请求快速转发到后端服务上。 早期的cloud中使用的是基于Zuul的网关,但是由于Zuul1.x是阻塞的,后面clo