SpringCloud-Gateway网关全悉

SpringCloudGateway作为SpringCloud的新一代网关,替代了Zuul,基于Webflux和Netty实现,提供更高的性能和更好的开发体验。其特点是动态路由、断言匹配、过滤器功能,并且支持Websocket和响应式流规范。相比Zuul,Gateway在非阻塞I/O模型上运行,性能更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)概述

使用说明文档

其他版本api文档请自由查阅:

https://spring.io/projects/spring-cloud-gateway#learn

在这里插入图片描述

1.1)是什么

Cloud全家桶中有个很重要的组件就是api网关,在1.x版本中都是采用的Zuul网关,但在2.x版本中,Zuul的升级一直跳票,SpringCLoud最后自己研发了一个网关替代Zuul。(采用了Zuul2的一些升级理念netty+webflux

一句话概括:

Spring Cloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架

在这里插入图片描述在这里插入图片描述

1.2)能干吗

  • 反向代理
  • 鉴权
  • 流量控制
  • 熔断
  • 日志监控

1.3)微服务架构中网关一般用在哪里

在这里插入图片描述

1.4)有了Zuul了怎么又出来了gateway

1.4.1 我们为什么选择Gatway

① neflix不太靠谱,zuul2.0一直跳票,迟迟不发布
  • Zuul1.0已经进入维护阶段,而且Gateway是SpringCloud团队研发的,值得信赖,而且很多功能Zuul都没有用起来,也非常的简单便捷
  • Gateway是基于异步非阻塞模型上进行开发的,性能方面不用担心,虽然Netflix早就发布了最新的Zuul 2.x,但Spring Cloud貌似没有整合计划,而且Netflix相关组件都宣布进入维护期;不知前景如何?
  • 多方面综合考虑Gateway是很理想的网关选择
② SpringCloud Gateway具有如下特性:
  • 基于Spring Framework 5,Project Reactor 和 Spring Boot 2.0进行构建
  • 动态路由:能匹配任何请求属性
  • 可以对路由指定 Predicate(断言)和 FIlter(过滤器)
  • 集成 Hystrix 的断路器功能
  • 集成 Spring Cloud 服务发现功能
  • 易于编写的 Predicate(断言)和 FIlter(过滤器)
  • 请求限流功能
  • 支持路径重写
③ SpringCloud Gateway与Zuul的区别

在Spring Cloud Finchley 正式版之前,Spring Cloud推荐的网关是Netflix提高的Zuul;

  • 1、Zuul 1.x,是一个基于阻塞 I/O 的 API Gateway
  • 2、Zuul 1.x 基于Servlet 2.5 使用阻塞架构它不支持任何长连接(如 Websocket)Zuul 的设计模式和Nginx较像,每次 I/O 操作都是从工作线程中选择一个执行,请求线程被阻塞直到工作线程完成,但是差别是Nginx用C++实现,Zuul基于Java实现,而JVM本身会有第一次加载较慢的情况,是的Zuul的性能相对较差。
  • 3、Zuul 2.x 理念更先进,想基于Netty非阻塞和支持长连接,但Spring Cloud目前还未整合。Zuul 2.x 的性能较 Zuul 1.x 有较大提升。在性能方面,根据官方提供的基准测试,Spring Cloud Gateway 的 RPS(每秒请求数)是 Zuul 的1.6倍。
  • 4、Spring Cloud Gateway 建立在 Spring Framework 5,Project Reactor 和 Spring Boot 2.0 之上,使用非阻塞API。
  • 5、Spring Cloud Gateway 还支持 Websocket ,并且与Spring 紧密集成,拥有更好的开发体验。

1.4.2)Zuul 1.x 模型

Spring Cloud 中所集成的Zuul版本,采用的是Tomcat容器,使用的是传统的Servlet IO处理模型

Servlet的生命周期:

  • servlet由servlet container 进行生命周期管理
  • container启动时构造servlet对象并调用servlet init() 进行初始化;
  • container运行时接受请求,并为每个请求分配一个线程(一般从线程池中获取空闲线程),然后调用service();
  • container关闭时调用 servlet destory() 销毁serlvet;
    在这里插入图片描述
    在这里插入图片描述

1.4.3)Gateway模型

WebFlux是什么
传统的web框架,比如说:struts,Spring mvc等都是基于Servlet API与Servlet容器基础上运行的。
但是
在Servlet 3.1 之后 有了异步非阻塞的支持。而WebFlux是一个典型的异步非阻塞框架,它的核心是基于Reactor 的相关API实现的。相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet 3.1的容器上。非阻塞+函数式编程(Spring 5 必须让你使用Java 8)

Spring WebFlux是Spring 5.0 引入的新的响应式框架,区别于Spring MVC,它不需要依赖Servlet API,它是完全异步非阻塞的,并且基于Reactor来实现响应式流规范。

在这里插入图片描述

官网地址:
https://docs.spring.io/spring-framework/docs/5.0.0.RELEASE/spring-framework-reference/web-reactive.html#webflux-introduction

在这里插入图片描述

2)三大核心概念

在这里插入图片描述

2.1)Route(路由)

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

2.2 )Predicate(断言)

参考Java8的java.util.function.Predicate开发人员可以匹配Http请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。

说白了,Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理

2.3)Filter(过滤器)

指的是Spring 框架中 GatewayFilter的实例,使用过滤器,可以在请求被路由或者之后对请求进行修改。

3)Gateway工作流程( 路由转发+执行过滤器链

参考文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/


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

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

Filter 在 “pre” 类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等;
在 “post” 类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值