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


    引言:网关为何而生?

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

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

    言归正传,在一个错综复杂的大型微服务系统里,各个服务间的 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 网管项目演练

    创建网关服务

    <
  • 相关阅读:
    【微观经济学】Consumer Theory
    求最大bit数(java)
    SpringBoot运维实用篇
    Pytorch入门基础知识(一)
    亿道丨三防平板丨加固平板丨为零售业提供四大优势
    CF - C. Card Game(博弈,递推)
    TCP编程及基础知识
    buildadmin+tp8表格操作(4) Table组件,baTable类和 elementplus中的属性关系
    Zabbix-企业级监控系统
    较真儿学源码系列-PowerJob启动流程源码分析
  • 原文地址:https://blog.csdn.net/JHIII/article/details/126482038