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

相关推荐
丸子哥哥3 小时前
同一个域名,如何添加多个网站?
服务器·前端·nginx·微服务
摇滚侠6 小时前
2025最新 SpringCloud 教程,教程简介,笔记01
笔记·spring cloud
豆奶特浓66 小时前
Java面试生死局:谢飞机遭遇在线教育场景,从JVM、Spring Security到AI Agent,他能飞吗?
java·jvm·微服务·ai·面试·spring security·分布式事务
vx_vxbs668 小时前
【SSM电动车智能充电服务平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·spring cloud·小程序·php·idea
踏浪无痕8 小时前
@Transactional的5种失效场景和自检清单
spring boot·后端·spring cloud
小坏讲微服务8 小时前
SpringCloud整合Scala实现MybatisPlus实现业务增删改查
java·spring·spring cloud·scala·mybatis plus
q***49868 小时前
SpringCloud系列教程:微服务的未来 (五)枚举处理器、JSON处理器、分页插件实现
spring cloud·微服务·json
2501_941144429 小时前
Python + C++ 异构微服务设计与优化
c++·python·微服务
拾忆,想起9 小时前
Dubbo分组(Group)使用指南:实现服务接口的多版本管理与环境隔离
分布式·微服务·性能优化·架构·dubbo
拾忆,想起11 小时前
Dubbo动态配置实时生效全攻略:零停机实现配置热更新
分布式·微服务·性能优化·架构·dubbo