欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Zuul和GateWay

Zuul和GateWay

2024/11/17 17:06:37 来源:https://blog.csdn.net/qq_34374058/article/details/143817715  浏览:    关键词:Zuul和GateWay

1 Zuul

       通过Servlet来实现,通过定义的ZuulServlet来对请求进行控制,主要做了:preRoute(前置路由)、route(路由)、postRoute(后置路由)、异常处理。

       整个调用链由ZuulFilter组成。底层利用各种filter实现各种功能。过滤器分以下四种

        1.pre:请求被路由前调用。身份验证、安全验证、在集群中选择请求的微服务、记录调试信息

       2. routing:这种过滤器将请求路由到微服务。构建发送给微服务的请求,用用httpclient或者Ribbon请求微服务。

        3.post:过滤器会在路由到微服务之后执行。可以用来为响应添加标准的HTTP header、收集统计信息和指标、将相应从微服务发送给客户端。

       4. error:发生错误时执行

作用:

        验证和安全保障;

        审查与监控;

        动态路由

        压力测试

        负载分配

        静态响应处理:自定义过滤器(继承ZuulFilter,然后编写对应处理逻辑),直接在zuul中生成响应,而不将请求转发到后端微服务。

(启动类里加上@EnableZuulProxy)

2 Gateway

        是spring cloud的一部分,用于构建基于SpringBoot的微服务网关。提供了类似于Zuul的功能,如路由、负载均衡、请求过滤、安全性等。使用了Spring WebFlux(是基于响应式流的,可以建立异步的、非阻塞的、事件驱动的服务,底层是Netty提供的异步支持,两种开发模式:类似于SpringMVC的@Controller和@RequestMapping的注解方式,;java8得lambda风格的函数开发模式)框架和Reactor库实现异步非阻塞的处理模型。并且内嵌了Hystrix断路器。

        (想了解WebFlux的可以去看看(5)Spring WebFlux快速上手——响应式Spring的道法术器_spring webflux的项目-CSDN博客)

2.1 GateWay三大组件:

路由Route

        id:路由标识,要求唯一,名称任意(默认uuid)

        uri:请求最终被转发道德的目标地址

        order:路由优先级,数字越小优先级越高

        predicates:断言数组,即判断条件,如果返回值是true,则转发请求到uri指定的服务

        filters:过滤器,请求过程中可以做一些额外的逻辑处理

断言Predicates

        表示路由的匹配条件,用来匹配请求的各种属性,如请求路径、方法、hearder等。用来判断参数检验,返回一个boolean值。一个Route可以包含多个Predicates

过滤器 Filter

        过滤器包含了处理请求和响应的逻辑,可以分为pre 和post两个阶段。多个Filter在pre阶段会按照优先级从高到低(数字从小到大)顺序执行,post则是反向的。Filter分两种:

        全局filter:每种全局filter在gateway只有一个实例,对所有Route生效;

        路由Filter:真多Route进行配置,不同的Route使用不同的参数,因此会创建不同的实例

2.2 具体流程

        gateway的本质就是一个springboot应用,它通过webflus框架处理请求和响应,而webflux底层是基于Netty。

        ①当gateway启动的时候:

               1. Spring 会装载GatewayAutoConfiguration 中配置的必要组件Bean。比如:

                        GatewayProperties,配置信息(包含路由配置信息)

                        GlobalFilter:默认全局过滤器

                        RouteDefinitionLocator:通过加载路由配置(如yaml文件)拿到RouteDefinition,里面是对路由的定义

                        RouteLocator:负责组装Route对象,里面全是路由相关信息。

                 2.启动Netty Server 负责监听请求

        ②当Gateway接收到请求

                webflux经过一层层过滤会调用HandlerMapping接口,拿到对应的Handler。最后调用Handler的handle方法进行业务处理(是不是很熟悉啊,想想SpringMVC)。

                 gateway通过实现HandlerMapping和Handler两个接口处理请求的任务拿到手里。根据请求信息从路由集合中找到匹配的路由,路由信息中包含了一个过滤器链。

                在Handler。handle方法中,请求经历上一步的过滤器链后转发到对应服务中

                              

3 zuul、GateWay 和 Nginx的区别

        zuul是Netflix开源的服务网关,主要用于构建微服务框架中的边缘服务。基于servlet实现,阻塞式api,不支持长连接。只能同步不支持异步。通过配置路由规则将请求路由到合适的后端服务。内部没有实现限流和负载,通过与Eureka+Ribbon结合使用,可以扩展至其他为服务框架。

        Gateway是SpringCloud的一部分,基于Spring WebFlux ,能够实现响应式非阻塞的api,支持长连接,支持异步。内部内嵌了Hystrix,实现了限流、负载均衡等,内部有很多开箱即用的功能。本质上就是一个springboot应用,但仅仅适用于spring cloud套件

        Nginx,C语言编写,通过服务器实现负载均衡,是一个高性能的HTTP反向代理web服务器。适合做服务器端的负载均衡,zuul和gateway是本地负载均衡,适合在微服务里实现网关。

        在微服务框架中,选微服务网关首选GateWay,首先他是spring官方的,zuul是Netflix的,GateWay推出的原因就是因为Zuul更新维护不理想。而且GateWay使用Spring WebFlux框架Reactor库,采用异步非阻塞的处理模型,性能会好一些。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com