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

相关推荐
indexsunny13 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
vx_Biye_Design18 小时前
【关注可免费领取源码】房屋出租系统的设计与实现--毕设附源码40805
java·spring boot·spring·spring cloud·servlet·eclipse·课程设计
Volunteer Technology1 天前
sentinel基本操作
spring cloud·sentinel
Dragon Wu1 天前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
vx_Biye_Design1 天前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
像少年啦飞驰点、1 天前
从零开始学 RabbitMQ:小白也能懂的消息队列实战指南
java·spring boot·微服务·消息队列·rabbitmq·异步编程
深圳行云创新1 天前
微服务架构引入 AI 后,怎么统一研发和运维的标准规范?
人工智能·微服务·架构
是阿楷啊1 天前
Java大厂面试场景:音视频场景中的Spring Boot与微服务实战
spring boot·redis·spring cloud·微服务·grafana·prometheus·java面试
天才奇男子1 天前
HAProxy高级功能全解析
linux·运维·服务器·微服务·云原生