SpringCloud包含的微服务介绍--Gateway

Spring Cloud Gateway作为Spring Cloud生态的API网关,提供路由、过滤器等功能,用于微服务请求的入口。它基于Spring Framework 5、Project Reactor和Spring Boot 2.0,支持动态路由、限流、过滤器等高级特性。相比Zuul,Gateway使用WebFlux框架,实现非阻塞通信。过滤器分为预处理和后处理,可用于权限验证、流量监控等。
摘要由CSDN通过智能技术生成

SpringCloud包含的微服务介绍–Gateway

Gateway基础介绍

什么是网关

在SpringCloud微服务体系中,有个很重要的组件就是网关,网关是整个微服务API请求的入口,负责拦截所有请求,分发到服务上去。可以实现日志拦截、权限控制、解决跨域问题、限流、熔断、负载均衡,隐藏服务端的ip,黑名单与白名单拦截、授权等,常用的网关有zuul(netflix的,但是已经停更了)和spring cloud gateway (springcloudalibaba)
网关可以理解为网络关卡,是整个微服务的统一入口(门卫)
网关可以理解为网络关卡,是整个微服务的统一入口(门卫)

SpringCloud Gateway 特征

SpringCloud官方,对SpringCloud Gateway 特征介绍如下:

(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

(2)集成 Hystrix 断路器

(3)集成 Spring Cloud DiscoveryClient

(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters

(5)具备一些网关的高级功能:动态路由、限流、路径重写

从以上的特征来说,和Zuul的特征差别不大。SpringCloud Gateway和Zuul主要的区别,还是在底层的通信框架上。

在这里插入图片描述
上图中是核心的流程图,最主要的就是Route、Predicates 和 Filters 作用于特定路由

1)Route:路由是网关的基本构件。由ID,目标URI,一组断言和一组过滤器组成
2)Predicate:就是访问该路由的访问规则,可以用来匹配来自http请求的任何内容,例如headers或者参数
3)Filter:这个就是我们平时说的过滤器,用来过滤一些请求的,gateway有自己默认的过滤器,具体请参考官网,我们也可以自定义过滤器,但是要实现两个接口:ordered和globalfilter

WebFlux

Gateway是基于WebFlux的,那么Webflux到底是什么?

我们知道传统的Web框架,比如说:struts2,springmvc等都是基于Servlet API与Servlet容器基础之上运行的,在Servlet3.1之后才有了异步非阻塞的支持。

Webflux模式替换了旧的Servlet线程模型。用少量的线程处理request和response io操作,这些线程称为Loop线程,而业务交给响应式编程框架处理,响应式编程是非常灵活的,用户可以将业务中阻塞的操作提交到响应式框架的work线程中执行,而不阻塞的操作依然可以在Loop线程中进行处理,大大提高了Loop线程的利用率。官方结构图:
在这里插入图片描述

Spring Cloud Gateway的处理流程

客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑
在这里插入图片描述

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

Gateway易混点

过滤器和网关的对比

过滤器:对单个服务器的请求进行拦截控制

网关:对所有的服务器的请求进行拦截控制

zuul和spring cloud gateway的对比

zuul:是Netflix的,是基于servlet实现的,阻塞式的api,不支持长连接。

gateway:是springcloud自己研制的微服务网关,是基于Spring5构建,能够实现响应式非阻塞式的Api,支持长连接

网关与nginx区别

Nginx 属于服务器端负载均衡器

Gateway 属于本地负载均衡器

相同点:都是可以实现对api接口的拦截,负载均衡、反向代理、请求过滤等,可以实现和网关一样的效果

不同点:Nginx采用C语言编写,Gateway属于Java语言编写的, 能够更好让我们使用java语言来实现对请求的处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值