Gateway:Spring Cloud API网关组件
Gateway:Spring Cloud API网关组件
问题总结
- API网关?
- Spring Cloud Gateway?
- GateWay的工作流程?(重点)
- Predicate断言?
- Filter过滤器?
问题答案
- API网关

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

Spring Cloud GateWay工作流程
- 客户端将请求发送到 GateWay 上。
- GateWay 通过 GateWay Handler Mapping 找到与请求相匹配的路由,将其发送给GateWay Web Handler。
- Gateway Web Handler 通过指定的过滤器链(Filter Chain),将请求转发到实际的服务节点中,执行业务逻辑返回响应结果。
- 过滤器之间用虚线分开是因为过滤器可能会在转发请求之前(pre)或之后(post)执行业务逻辑。
- 过滤器(Filter)可以在响应返回客户端之前,对响应进行拦截和再处理,例如参数校验、权限校验、流量控制、日志输出以及协议转换等。
- 过滤器可以在响应返回客户端之前,对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量控制等。
- 响应原路返回给客户端。
- 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 上。 |
- 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网关组件的更多相关文章
- Spring Cloud API网关服务 5.2
为什么需要API网关 通过前面内容的学习,我们已经可以构建一个简单的微服务架构系统.这个系统可以使用Spring Boot实现微服务的开发,使用Spring Cloud Eureka实现注册中心以及服 ...
- Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...
- Spring Cloud 服务网关Zuul
Spring Cloud 服务网关Zuul 服务网关是分布式架构中不可缺少的组成部分,是外部网络和内部服务之间的屏障,例如权限控制之类的逻辑应该在这里实现,而不是放在每个服务单元. Spring Cl ...
- 创建swagger的springboot-stater,并在spring cloud zuul网关中引入
Swagger 是一款RESTFUL接口的.基于YAML.JSON语言的文档在线自动生成.代码自动生成的工具. 通过在controller中添加注解,即可轻易实现代码文档化. Swagger提供ui界 ...
- spring cloud链路追踪组件sleuth和zipkin
spring cloud链路追踪组件sleuth 主要作用就是日志埋点 操作方法 1.增加依赖 <dependency> <groupId& ...
- Spring cloud Zuul网关异常处理
Spring cloud Zuul网关异常处理 一 异常测试: 1> 创建一个pre类型的过滤器,并在该过滤器的run方法实现中抛出一个异常.比如下面的实现,在run方法中调用的doSometh ...
- Spring cloud的各类组件
Spring cloud 的各类组件 1.注册中心 eureka 2.ribbon 3.feign 4.hystirx 断路器 5.高速缓存器 redis 6.断路器Dashboard监控仪表盘
- Spring Boot版本,Spring Cloud版本与组件版本关系
我们在学习Spring Cloud时,可能总是碰到以下问题: 1.Spring Boot版本与Spring Cloud版本关系 2.启动时,报莫名其妙的错,稀里糊涂的换个版本就好了 3.这么多版本,用 ...
- 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 ...
- Spring Cloud之网关
接口的分类: 开放接口:可以授权一些接口口OAuth2.0协议方式 第三方联合登录 内部接口: 一般只能在局域网中进行访问,服务与服务之间关系都在同一个微服务系统中.目的是为了保证安全问题 接口设 ...
随机推荐
- Ds100p -「数据结构百题」11~20
11.P3203 [HNOI2010]弹飞绵羊 某天,\(Lostmonkey\) 发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏. 游戏一开始,\(Lostmonkey ...
- JUC并发编程(1)—CompletableFuture详解
@ 目录 CompletableFuture介绍 1.创建异步任务 2.CompletableFuture API ①. 获得结果和触发计算(get.getNow.join.complete) ②. ...
- Markdown · Typora | 基本画图技巧
如果想画一些简单的状态图,可以使用 typora 自带的 mermaid 工具. (mermaid 不止能画简单的状态图,还能画流程图等,详见参考资料) 定义节点 可以定义不同形状的节点,并为节点添加 ...
- C# 12 中的新增功能
新的 C# 12 功能在预览版中已经引入. 您可以使用最新的 Visual Studio 预览版或最新的 .NET 8 预览版 SDK 来尝试这些功能.以下是一些新引入的功能: 主构造函数 集合表达式 ...
- Insert a scratch project into a ppt (MSPowerPoinT file)在powerpoint中播放Scratch动画
Insert a scratch project into a ppt (MSPowerPoinT file)在powerpoint中播放Scratch动画 Contributed by liu pe ...
- 文心一言 VS 讯飞星火 VS chatgpt (109)-- 算法导论10.1 7题
七.用go语言,说明如何用两个队列实现一个栈,并分析相关栈操作的运行时间. 文心一言: 在Go语言中,我们可以用两个队列(queue1和queue2)实现一个栈.以下是实现代码: package ma ...
- 我在前端写Java SpringBoot项目
前言 玩归玩,闹归闹,别拿 C端 开玩笑! 这里不推荐大家把Node服务作为C端服务,毕竟它是单线程多任务 机制. 这一特性是 Javascript 语言设计之初,就决定了它的使命 - Java &g ...
- 超星读书下载的pdz文件如何转为pdf文件详细教程(亲测有效)
前言: 你还在为超星读书下载的pdz格式书籍而烦恼吗?还在为不知道怎么将pdz格式转为pdf格式而气愤吗?请看以下教程. 流程: 使用超星阅读器将pdz文件转换为.xps或.oxps文件 利用第三方软 ...
- Redis中的缓存雪崩、缓存击穿、缓存穿透问题
1. 什么是缓存雪崩 当我们提到缓存系统中的问题,缓存雪崩是一个经常被讨论的话题.缓存雪崩是指在某一时刻发生大量的缓存失效,导致瞬间大量的请求直接打到了数据库,可能会导致数据库瞬间压力过大甚至宕机.尤 ...
- CompletableFuture异步优化代码
CompletableFuture异步编排优化代码 我们在项目开发中,有可能遇到一个接口需要调用N个服务的接口.比如用户请求获取订单信息,需要调用用户信息.商品信息.物流信息等接口,最后再汇总数据统一 ...