当前位置: 首页 > web >正文

形象的讲解什么是Gateway网关

文章目录

  • 一、什么是网关?
  • 二、什么是Gateway网关
    • 1、概述
    • 2、Predicate(断言)
    • 3、Filter(过滤器)
      • 3.1 Pre类型和Post类型
      • 3.2 GatewayFilter和GlobalFilter
        • GatewayFilter:
        • GlobalFilter:
    • 4、过滤器的执行顺序

一、什么是网关?

通常我们把API网关简称为网关。
要弄懂Gateway网关,我们需要知道什么是网关。
在web应用服务中会涉及很多的接口调用,而且服务器的种类也有很多,为了更好的管理这些接口的调用规则,我们需要建立一个网络请求进入的统一入口。让这个入口帮我们匹配每一个请求所需要调用的服务,也可以帮助我们实现用户校验(只暴露网关接口给用户,其他接口统一用网关处理,不暴露于公网)、负载均衡、流量控制等功能:

在这里插入图片描述


二、什么是Gateway网关

1、概述

Spring Cloud Gateway是网关的一个实现方式,它是基于Spring+SpringBoot进行开发的。
Gateway的组成主要是两大部分

  • Predicate(断言)
  • Filter(过滤器)

2、Predicate(断言)

Gateway中有很多的Predicate(断言),这里的断言我们可以形象的理解成大门(网关)后面的多个小入口(某一个服务的接口)的保安。这些保安有自己的决策权力,决定当前游客是否可以进入园区:

Gateway
大门
Predicates
保安大队
Path=/api/users/**
保安A: 检查用户路径
Path=/api/orders/**
保安B: 检查订单路径
Host=admin.example.com
保安C: 检查管理域名
Query=debug=true
保安D: 检查调试参数
User Service
用户园区
Order Service
订单园区
Admin Service
管理园区
Debug Service
调试园区

注意:
Gateway实现断言功能,是基于Java中自带的函数式接口,Gateway只是运用了Java这个接口的特性:

@FunctionalInterface
public interface Predicate<T>

这个接口有Java官方自带的五个逻辑判断的默认方法或者静态方法:

default Predicate<T> negate();default Predicate<T> or(Predicate<? super T> other);static <T> Predicate<T> not(Predicate<? super T> target); default Predicate<T> or(Predicate<? super T> other);static <T> Predicate<T> isEqual(Object targetRef);

以及一个可重写的自定义判断逻辑:

boolean test(T t);

3、Filter(过滤器)

Predicate(断言)决定了发到网关的请求具体应该给到哪一个服务;Filter(过滤器)则是在这个请求的前后增加一些处理逻辑,这就是过滤器的作用范围。

3.1 Pre类型和Post类型

过滤器按照执行时机分为:Pre类型Post类型

  • Pre类型过滤器:路由处理之前执行请求转接到后端服务之前执行,在Pre类型过滤器中可以做鉴权、限流等。

  • Post类型过滤器:请求执行完成后,将结果返回给客户端之前执行,可以给响应体增加某些参数等。

比如去景区游玩:

  1. 进景区之前需要先买检票,验票(鉴权),如果今日进景区的游客超过了规定的人数,就不会进行限流(pre类型)
  2. 接下来进景区游玩
  3. 游玩之后,对景区服务进行评价(post类型)

3.2 GatewayFilter和GlobalFilter

gateway提供了GatewayFilter和GlobalFilter这两种过滤器的实现类;这两个实现类都有自带的过滤逻辑,只需要在yml文件中配置即可。
此外 GatewayFilter和GlobalFilter两个类也支持自定义重写,我们可以通过这个特性自定义一些过滤器。
具体操作方法不是本博客重点,所以不做过多说明。

GatewayFilter:
  • 定义
    GatewayFilter 是应用于特定路由(Route)的过滤器,用于处理特定路由的请求和响应。每个 GatewayFilter 通常通过 Spring Cloud Gateway 提供的 GatewayFilterFactory 实现,或者通过自定义方式实现。

  • 作用范围
    仅作用于绑定到的具体路由,不会自动应用于所有路由(也就是具体的某一个园区这个过滤器才会生效)。

GlobalFilter:
  • 定义
    GlobalFilter 是一个全局过滤器,作用于所有路由(Routes),无需显式绑定到某个路由。开发者通过实现 GlobalFilter 接口并注入 Spring 容器来定义。

  • 作用范围:
    全局生效,适用于所有请求和响应。

Default Filters
前面讲过GatewayFilter在指定服务中才会生效,而默认过滤器会在全部服务中生效。它提供了一些便捷过滤逻辑,直接在yml文件中配置即可;缺点是不支持自定义。

4、过滤器的执行顺序

过滤器的执行顺序时根据优先级的数值(int类型的数字大小)决定的。数值越小,优先级越高,越先执行。
在优先级相同情况下执行顺序:
GlobalFilter -> GatewayFilter-> defaultFilter

defaultFilter的优先级默认是Integer.MAX_VALUE,而且这个过滤器是不可以自定义的,所以它的执行优先级最低且不可更改。
而自定义的GlobalFilter 和GlobalFilter 可以通过它们的Order方法去修改优先级的。

http://www.xdnf.cn/news/2295.html

相关文章:

  • leetcode110 平衡二叉树
  • Ubuntu 之软件包管理系统
  • 前端技术个人求职简历模板
  • new/delete 重载与对象池实现
  • 高性能电脑系统优化工具Advanced SystemCare PRO v18.3.0.240 解锁永久专业版
  • 学习Spire.Office for Java版本的科学实践
  • 栈与队列 Part 2
  • 【NeurlPS 2024】MAR:无矢量量化的自回归图像生成
  • Jquery -函数调用使用创建立即执行函数
  • 代码随想录回文子序列
  • MQL5教程 06 EA开发实战
  • 【免费项目分享】(项目加说明文档)基于Go语言的城市电动汽车充电桩管理系统设计与实现
  • 深度学习原理与Pytorch实战
  • B. And It‘s Non-Zero
  • 八、Constants(常量)
  • Spring 学习笔记之 @Transactinal实现原理
  • Loki日志体系的搭建
  • Linux: 如何在VMware上安装Ubuntu操作系统
  • Redis 数据类型全览:特性、场景与操作实例
  • 泽润新能IPO隐忧:募资缩水2亿元,毛利率两连降,内控存瑕疵?
  • Eigen稀疏矩阵类 (SparseMatrix)
  • VS2019 与gitcode团队管理
  • QT6 源(52)篇二:存储 c 语言字符串的类 QByteArray 的使用举例,
  • Git基本操作
  • 第34课 常用快捷操作——按“空格键”旋转图元
  • MySQL技术白皮书
  • 定位与解决线上 OOM 问题:原因分析与快速排查指南
  • o4 - mini 助力,OpenAI 向免费用户推出轻量版 Deep Research
  • CMake 中使用动态库时的 DLL 拷贝逻辑详解(以 zlib 为例)
  • 【BBDM】main.py -- notes