SpringCloud之Gateway基础认识-服务网关

0、Gateway基本知识

  1. Gateway 是在 Spring 生态系统之上构建的 API 网关服务,基于 Spring ,Spring Boot 和 Project Reactor 等技术。

  2. Gateway 旨在提供一种简单而有效的方式来对 API 进行++路++由,以及提供一些强大的过滤器功能,例如∶熔断、限流、重试等。

官网:

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/

先认识网关:

在没有网关服务之前:

有了网关服务之后:

网关服务核心功能

  1. ​统一调用接口​

    • 对外提供统一入口,根据请求URL路径转发到对应的后端服务
    • 配置化路由 :通过配置即可实现断言(匹配规则)和过滤
  2. ​流量治理与安全​

    • 负载均衡(商品服务集群多实例场景)
    • 限流(防止刷接口)
    • 熔断(服务异常时快速失败)
    • 鉴权(拦截非法请求)
    • 日志监控
    • 反向代理

1、网络拓扑图

2、Gateway 和 Zuul 区别

  1. SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul
  2. SpringCloud Gateway 是基于 Spring WebFlux 框架实现的
  3. Spring WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty , 提升了网关性能

3、Gateway 特性

Spring Cloud Gateway 基于 Spring Framework( 支持 Spring WebFlux)Project ReactorSpring Boot 进行构建**,** 具有如下特性**:**

  • 动态路由:根据url动态的决定调用的哪个远程地址
  • 可以对路由指定 Predicate(断言)和Filter(过滤器): 判断这个请求能不能处理,过滤器用于在请求被路由到后端服务 ​前(Pre)​​后(Post)​ 对请求或响应进行修改或增强。
  • 集成Hystrix的断路器功能: 熔断
  • **集成 Spring Cloud 服务发现功能:**从 Eureka Server 获取远程Service地址
  • 请求限流功能:
  • 支持路径重写: 根据业务需求进行重写

4、Gateway 核心组件

1、Route(路由):

路由是构建网关的基本模块,它由 ID,目标 URI,一系列的断言和过滤器组成,如果断言为 true 则匹配该路由

2、Predicate(断言):

对 HTTP 请求中的所有内容(例如请求头或请求参数)进行匹配,如果请求与断言相匹配则进行路由。

简单举例, 比如配置路径, - Path=/member/get/** ==>断言*:* 路径相匹配的进行路由转发*,* 如果Http 请求的路径不匹配*,* 则不进行路由转发*.*

3、filters(过滤器):

使用过滤器,可以在请求被路由 或者之对请求进行处理

你可以理解成, 在对 Http 请求断言匹配成功后, 可以通过网关的过滤机制, 对 Http 请求处理

简单举例:

  • AddRequestParameter=color, blue # 过滤器在匹配的请求头加上一对请求头,名称为color值为blue**, 比如原来的http 请求是 http://localhost:10000/member/get/1

== 过滤器处理*=>**统一携带参数:*http://localhost:10000/member/get/1?color=blue

5、流程梳理

  1. 客户端向Spring Cloud Gateway 发出请求。然后在Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到Gateway Web Handler

  2. Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。

  3. 过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前("pre")或之后("post")执行业务逻辑。

  4. Filter 在"pre"类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换

  5. 在"post"类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

红色方框为一个过滤器

一句话说:路由转发+执行过滤器链

路由转发=发送到后端服务之前='pre'执行过后

6、其他

后续服务网关代替消费端,被视为Erueka Client

相关推荐
猿小羽5 小时前
深入理解 Microservice Control Proxy(MCP) 的 AI 实战指南
微服务·ai·推荐系统·service mesh·microservice·mcp·ai 实战
掘根7 小时前
【即时通讯系统】项目框架与微服务拆分设计
微服务·云原生·架构
编程彩机9 小时前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
编程彩机9 小时前
互联网大厂Java面试:从Spring WebFlux到分布式事务的技术场景解析
java·微服务·面试·分布式事务·spring webflux
造夢先森9 小时前
Clawdbot(OpenClaw)安装部署教程
人工智能·微服务·云原生
m0_740043731 天前
【无标题】
java·spring boot·spring·spring cloud·微服务
编程彩机1 天前
互联网大厂Java面试:从微服务到分布式缓存的技术场景解析
redis·spring cloud·消息队列·微服务架构·openfeign·java面试·分布式缓存
Gary董1 天前
高并发的微服务架构如何设计
微服务·云原生·架构
像少年啦飞驰点、1 天前
零基础入门 Spring Boot:从“Hello World”到可部署微服务的完整学习路径
java·spring boot·微服务·编程入门·后端开发
java干货1 天前
微服务:把一个简单的问题,拆成 100 个网络问题
网络·微服务·架构