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

相关推荐
掘金-我是哪吒2 小时前
分布式微服务系统架构第128集:elastic-search安装部署
分布式·微服务·云原生·架构·系统架构
weixin_4373982111 小时前
RabbitMQ深入学习
java·分布式·后端·spring·spring cloud·微服务·rabbitmq
k↑15 小时前
物联网之使用Vertx实现MQTT-Server最佳实践【响应式】
物联网·mqtt·微服务·响应式
残花月伴16 小时前
springCloud/Alibaba常用中间件之Nacos服务注册与发现
spring·spring cloud·中间件
码农飞哥16 小时前
互联网大厂Java求职面试实战:Spring Boot微服务与数据库优化详解
java·spring boot·微服务·mybatis·数据库优化·性能监控·安全框架
破烂公司一级特派员18 小时前
互联网大厂Java面试实录:从基础到微服务的深度考察
java·spring boot·微服务·八股文·面试技巧
Linux运维老纪18 小时前
微服务6大拆分原则
java·运维·微服务
黄俊懿18 小时前
【深入理解SpringCloud微服务】手写实现一个微服务分布式事务组件
java·分布式·后端·spring·spring cloud·微服务·架构师
zhojiew20 小时前
istio in action之Gateway流量入口与安全
安全·gateway·istio
boring_11120 小时前
异地多活单元化架构下的微服务体系
数据库·微服务·架构