Gateway:Spring Cloud API网关组件

问题总结

  1. API网关?
  2. Spring Cloud Gateway?
  3. GateWay的工作流程?(重点)
  4. Predicate断言?
  5. Filter过滤器?

问题答案

  1. API网关

  • 优点:

    • 客户端只需要维护API网关地址即可,不用维护大量的服务地址,简化了客户端开发。
    • 客户端直接与API网关通信,能够减少客户端与各个服务的交互次数。
    • 客户端与后端的服务耦合度降低。
    • 节省流量,提升性能,提升用户体验。
    • API网关还提供了安全、流控、过滤、计费以及监控等功能。
  1. Spring Cloud GateWay
核心概念 描述
Route(路由) 网关最基本的模块。它由一个ID、一个目标URI、一组断言(Predicate)和一组过滤器(Filter)组成。
Predicate(断言) 路由转发的判断条件,通过Predicate对HTTP请求进行匹配,例如请求方式、请求路径、请求头、参数等。
Filter(过滤器) 对请求进行拦截和修改,对上文的响应进行再处理。
  • GateWay的特征

    • 能够在任意请求属性上匹配路由。
    • predicates和filters是特定于路由的。
    • 集成了Hystrix熔断器。
    • 能够限制请求频率。
    • 能够重写请求路径。
  1. GateWay的工作流程(重点)

  • Spring Cloud GateWay工作流程

    • 客户端将请求发送到 GateWay 上。
    • GateWay 通过 GateWay Handler Mapping 找到与请求相匹配的路由,将其发送给GateWay Web Handler。
    • Gateway Web Handler 通过指定的过滤器链(Filter Chain),将请求转发到实际的服务节点中,执行业务逻辑返回响应结果。
    • 过滤器之间用虚线分开是因为过滤器可能会在转发请求之前(pre)或之后(post)执行业务逻辑。
    • 过滤器(Filter)可以在响应返回客户端之前,对响应进行拦截和再处理,例如参数校验、权限校验、流量控制、日志输出以及协议转换等。
    • 过滤器可以在响应返回客户端之前,对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量控制等。
    • 响应原路返回给客户端。
  1. Predicate断言

Predicate是路由转发的判断条件,请求只有满足了Predicate的条件,才会被转发到指定的服务上进行处理。

  • Route路由与Predicate断言的对应关系为 ”一对多“ ,一个路由可以有多个断言。
  • 一个请求想要转发到对应的路由上,就必须同时匹配路由上的所有断言。
  • 当一个请求满足多个路由的断言时,会转发给第一个匹配的路由。

断言 示例 说明
Path - Path=/dept/list/** 当请求路径与/dept/list/**匹配时,该请求才能转发到 http://localhost:8080 上。
Before - Before=2021-10-20T11:47:34.255+08:00[Asia/Shanghai] 在 2021 年 10 月 20 日 11 时 47 分 34.255 秒之前的请求,才会被转发到 http://localhost:8001 上。
After - After=2021-10-20T11:47:34.255+08:00[Asia/Shanghai] 在 2021 年 10 月 20 日 11 时 47 分 34.255 秒之后的请求,才会被转发到 http://localhost:8001 上。
Between - Between=2021-10-20T15:18:33.226+08:00[Asia/Shanghai],2021-10-20T15:23:33.226+08:00[Asia/Shanghai] 在 2021 年 10 月 20 日 15 时 18 分 33.226 秒 到 2021 年 10 月 20 日 15 时 23 分 33.226 秒之间的请求,才会被转发到 http://localhost:8001 服务器上。
Cookie - Cookie=name,c.biancheng.net 携带 Cookie 且 Cookie 的内容为 name=c.biancheng.net 的请求,才会被转发到 http://localhost:8001 上。
Header - Header=X-Request-Id,\d+ 请求头上携带属性 X-Request-Id 且属性值为整数的请求,才会被转发到 http://localhost:8001 上。
Method - Method=GET 只有 GET 请求才会被转发到 http://localhost:8001 上。
  1. Filter过滤器

服务端提供服务通常需要一定的校验逻辑,如用户登录状态校验,签名校验等。(写入网关中)

过滤器类型 说明
Pre类型 这种过滤器在请求被转发到微服务之前可以对请求进行拦截和修改, 如参数校验、权限校验、流量监控、日志输出以及协议转换等操作。
Post类型 这种过滤器在微服务对请求做出响应后可以对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。
  • GateWayFilter:应用在单个路由或者一组路由上。
  • GlobalFilter:应用在所有的路由上的过滤器。

Spring Cloud GateWay 内置了31种GateWayFilter,以下举例。

路由过滤器 描述 参数 使用示例
AddRequestHeader 拦截传入的请求,并在请求上添加一个指定的请求头参数。 name:需要添加的请求头参数的 key; value:需要添加的请求头参数的 value。 - AddRequestHeader=my-request-header,1024
AddRequestParameter 拦截传入的请求,并在请求上添加一个指定的请求参数。 name:需要添加的请求参数的 key; value:需要添加的请求参数的 value。 - AddRequestParameter=my-request-param,c.biancheng.net
AddResponseHeader 拦截响应,并在响应上添加一个指定的响应头参数。 name:需要添加的响应头的 key; value:需要添加的响应头的 value。 - AddResponseHeader=my-response-header,c.biancheng.net
PrefixPath 拦截传入的请求,并在请求路径增加一个指定的前缀。 prefix:需要增加的路径前缀。 - PrefixPath=/consumer
PreserveHostHeader 转发请求时,保持客户端的 Host 信息不变,然后将它传递到提供具体服务的微服务中。 - PreserveHostHeader
RemoveRequestHeader 移除请求头中指定的参数。 name:需要移除的请求头的 key。 - RemoveRequestHeader=my-request-header
RemoveResponseHeader 移除响应头中指定的参数。 name:需要移除的响应头。 - RemoveResponseHeader=my-response-header
RemoveRequestParameter 移除指定的请求参数。 name:需要移除的请求参数。 - RemoveRequestParameter=my-request-param
RequestSize 配置请求体的大小,当请求体过大时,将会返回 413 Payload Too Large。 maxSize:请求体的大小。 - name: RequestSize args: maxSize: 5000000

GlobalFilter是一种作用于所有路由上的全局过滤器,可以实现一些统一化的业务功能,如权限认证、IP访问限制。

Gateway:Spring Cloud API网关组件的更多相关文章

  1. Spring Cloud API网关服务 5.2

    为什么需要API网关 通过前面内容的学习,我们已经可以构建一个简单的微服务架构系统.这个系统可以使用Spring Boot实现微服务的开发,使用Spring Cloud Eureka实现注册中心以及服 ...

  2. Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务

    API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...

  3. Spring Cloud 服务网关Zuul

    Spring Cloud 服务网关Zuul 服务网关是分布式架构中不可缺少的组成部分,是外部网络和内部服务之间的屏障,例如权限控制之类的逻辑应该在这里实现,而不是放在每个服务单元. Spring Cl ...

  4. 创建swagger的springboot-stater,并在spring cloud zuul网关中引入

    Swagger 是一款RESTFUL接口的.基于YAML.JSON语言的文档在线自动生成.代码自动生成的工具. 通过在controller中添加注解,即可轻易实现代码文档化. Swagger提供ui界 ...

  5. spring cloud链路追踪组件sleuth和zipkin

    spring cloud链路追踪组件sleuth     主要作用就是日志埋点 操作方法 1.增加依赖             <dependency>      <groupId& ...

  6. Spring cloud Zuul网关异常处理

    Spring cloud Zuul网关异常处理 一 异常测试: 1> 创建一个pre类型的过滤器,并在该过滤器的run方法实现中抛出一个异常.比如下面的实现,在run方法中调用的doSometh ...

  7. Spring cloud的各类组件

    Spring cloud 的各类组件 1.注册中心 eureka 2.ribbon 3.feign 4.hystirx 断路器 5.高速缓存器 redis 6.断路器Dashboard监控仪表盘

  8. Spring Boot版本,Spring Cloud版本与组件版本关系

    我们在学习Spring Cloud时,可能总是碰到以下问题: 1.Spring Boot版本与Spring Cloud版本关系 2.启动时,报莫名其妙的错,稀里糊涂的换个版本就好了 3.这么多版本,用 ...

  9. API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd API 网关出现的原因

    API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd http://www.infoq.com/cn/articles/compa ...

  10. Spring Cloud之网关

    接口的分类: 开放接口:可以授权一些接口口OAuth2.0协议方式  第三方联合登录 内部接口:  一般只能在局域网中进行访问,服务与服务之间关系都在同一个微服务系统中.目的是为了保证安全问题 接口设 ...

随机推荐

  1. Python基于Flask的高校舆情分析,舆情监控可视化系统

    一.前言在当今社会,舆情监控越来越被重视.随着互联网技术的发展,我们从传统媒体渠道.官方报告.调查问卷等方式搜集到的舆情信息,逐渐被网络上的内容所替代.因为网络上的内容传播速度快.及时性强.覆盖范围广 ...

  2. 【AI 模型】首个 Joy 模型诞生!!!全民生成 Joy 大片

    接上一篇文章 "只要10秒,AI生成IP海报,解放双手",这次是全网第一个"共享joy模型",真的赚到了! 经过这段时间无数次的探索.试错.实验,最终积累了非常 ...

  3. Mac 下使用 ffmpeg 制作 gif

    Mac 下使用 ffmpeg 制作 gif 公众号文章,gif要求  300帧数以内        .以下是从 mp4 转为 gif 的步骤. 步骤 ffmpeg 是著名的视频处理开源软件 brew ...

  4. studio

  5. Shuffle 题解

    Shuffle 题目大意 给定一个长度为 \(n\) 的 01 序列 \(a\),你可以进行至多一次以下操作: 选定 \(a\) 的一个连续段,满足连续段内恰好有 \(k\) 个 \(1\),将该连续 ...

  6. [转载]R2: 已解释和未解释的方差

    估计值的方差与总体方差之间的差异就是回归方程对方差的解释率.试举一例,如图 1,身高与体重的回归线显示身高与体重之间呈正相关,Mr. Y身高76英寸体重220磅(图 1中插图.cdr的红点),他与体重 ...

  7. 持续集成(CI)、自动化构建和自动化测试--初探

    转自:http://blog.csdn.net/adparking/article/details/5796532 此文章是为了总结前一段时间由于Maven2的学习而引起的一个持续集成的学习. 一.什 ...

  8. 基于springboot+vue开发的教师工作量管理系

    教师工作量管理系 springboot31 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟.本文介绍了教师工作量管理系统的开发全过程.通过分析教师工作量管理系统 ...

  9. SNN_文献阅读_Spiking neural networks, an introduction

    Spiking neural networks, an introduction 脉冲神经网络的生物学背景+两种采用脉冲编码的神经元模型 概论 本文介绍了脉冲神经网络的生物学背景,并将介绍两种采用脉冲 ...

  10. python列表删除元素之del,pop()和remove()

    del函数 如果知道要删除元素在列表中的位置,可以使用del语句: list_1 = ['one', 'two', 'three'] print(list_1) del list_1[0] print ...