• SpringCloud - Spring Cloud 之 Gateway网关(十三)


    阅读本文前可先参考

    ​​​​​​SpringCloud - Spring Cloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客

    一、API网关

    引自百度百科

    API网关,软件术语,两个相互独立的局域网之间通过路由器进行通信,中间的路由被称之为网关

    任何一个应用系统如果需要被其他系统调用,就需要暴露 API,这些 API 代表着一个一个的功能点。

    如果两个系统中间通信,在系统之间加上一个中介者协助 API 的调用,这个中介者就是 API 网关

    API 网关是一个搭建在客户端和微服务之间的服务,我们可以在 API 网关中处理一些非业务功能的逻辑,例如权限验证、监控、缓存、请求路由等。

    API 网关就像整个微服务系统的门面一样,是系统对外的唯一入口。有了它,客户端会先将请求发送到 API 网关,然后由 API 网关根据请求的标识信息将请求转发到微服务实例。

    对于服务数量众多、复杂度较高、规模比较大的系统来说,使用 API 网关具有以下好处:

    • 客户端通过 API 网关与微服务交互时,客户端只需要知道 API 网关地址即可,而不需要维护大量的服务地址,简化了客户端的开发。
    • 客户端直接与 API 网关通信,能够减少客户端与各个服务的交互次数。
    • 客户端与后端的服务耦合度降低。
    • 节省流量,提高性能,提升用户体验。
    • API 网关还提供了安全、流控、过滤、缓存、计费以及监控等 API 管理功能。

    常见的 API 网关实现方案主要有以下 5 种:

    • Spring Cloud Gateway
    • Spring Cloud Netflix Zuul
    • Kong
    • Nginx+Lua
    • Traefik

    二、Gateway

    Spring Cloud Gateway 是 Spring Cloud 团队基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技术开发的高性能 API 网关组件。

    Spring Cloud Gateway 是基于 WebFlux 框架实现的,而 WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty

    Spring Cloud GateWay 最主要的功能就是路由转发,而在定义转发规则时主要涉及了以下三个核心概念

    1、Route(路由)

    2、Predicate(断言)

    3、Filter(过滤)

    核心概念描述
    Route(路由)网关最基本的模块。它由一个 ID、一个目标 URI、一组断言(Predicate)和一组过滤器(Filter)组成。
    Predicate(断言)路由转发的判断条件,我们可以通过 Predicate 对 HTTP 请求进行匹配,例如请求方式、请求路径、请求头、参数等,如果请求与断言匹配成功,则将请求转发到相应的服务。
    Filter(过滤器)过滤器,我们可以使用它对请求进行拦截和修改,还可以使用它对上文的响应进行再处理。

    注:其中 Route 和 Predicate 必须同时声明

    Spring Cloud Gateway 工作流程

     1、客户端将请求发送到 Spring Cloud Gateway 上

     2、Spring Cloud Gateway 通过 Gateway Handler Mapping 找到与请求相匹配的路由,将其发送给 Gateway Web Handler。

     3、Gateway Web Handler 通过指定的过滤器链(Filter Chain),将请求转发到实际的服务节点中,执行业务逻辑返回响应结果。

     4、过滤器之间用虚线分开是因为过滤器可能会在转发请求之前(pre)或之后(post)执行业务逻辑。

     5、过滤器(Filter)可以在请求被转发到服务端前,对请求进行拦截和修改,例如参数校验、权限校验、流量监控、日志输出以及协议转换等。

     6、过滤器可以在响应返回客户端之前,对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。

     7、响应原路返回给客户端

  • 相关阅读:
    7. SQL中函数的简介
    CSS3 background-clip背景裁剪、CSS3 background-origin背景图片起点
    SpringMVC 程序开发
    气象数据库分析
    vscode使用remote-ssh免密连接服务器
    C51--项目--感应开关盖垃圾桶
    下一代工具链「GitHub 热点速览 v.22.43」
    《深入浅出消息中间件》-RabbitMQ 安装
    JavaWeb-JDBC-Mybatis-Junit-Maven-Lombok
    【计算机网络篇】数据链路层(13)共享式以太网与交换式以太网的对比
  • 原文地址:https://blog.csdn.net/MinggeQingchun/article/details/125334406