Spring Cloud的路由网关Zuul

Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由、过滤、监控、弹性伸缩和安全。

为什么需要Zuul?

zuul作为路由网关组件,在微服务架构中有着非常重要的作用,主要体现在以下几个方面:

一、Zuul Ribbon以及Eureka相结合,可以实现智能路由和负载均衡的功能,Zuul能够将请求流量按某种策略分发到集群状态下的多个服务实例。

二、网关将所有服务的API接口统一聚合,并统一对外暴露。外界系统调用API接口时,都是由网关以外暴露的API接口,外界系统不需要知道微服务系统的各个服务相互调用的复杂性。微服务系统也保护了其内部微服务单元的API接口,防止其被外界直接调用,导致服务的敏感信息对外暴露。

三、网关服务可以做用户身份认证和权限认证,防止非法请求操作API接口,对服务器起到保护作用。

四、网关可以实现监控功能,实时日志输出,对请求进行记录。

五、网关可以用来实现流量监控,在高流量的情况下,对服务进行降级。

六、API接口从内部服务分离出来,方便做测试。

Zuul的工作原理

Zuul是通过Servlet来实现的,Zuul通过自定义的ZuulServlet(类似Spring MVC的DispatchServlet)来对请求进行控制。Zuul的核心就是一系列过滤器,可以在http请求的发起和响应返回期间执行一系列的过滤器。

Zuul包括四种过滤器

PRE过滤器:它是在请求路由到具体的服务之前执行的,这种类型的过滤器可以做安全验证。例如身份验证、参数验证等。

ROUTING过滤器:它用于将请求路由到具体的微服务实例。在默认情况下,它使用Http Client进行网络请求。

POST过滤器:它是在请求已被路由到微服务后执行的。一般情况下,用作收集统计信息、指标,以及将响应传输到客户端。

ERROR过滤器:它是在其他过滤器发生错误时执行的。

Zuul采取了动态读取、编译和运行这些过滤器。过滤器之间不能直接相互通信,而是通过RequestContext对象来共享数据,每个请求都会创建一个RequestContext对象。

Zuul过滤器具有以下关键特性:

Type类型:Zuul过滤器的类型,这个类型决定了过滤器在请求的哪个阶段起作用,例如Pre、Post阶段等。

Execution Order(执行顺序):规定了过滤器的执行顺序,Order的值越小,越先执行。

Criteria(标准):Filter执行所需的条件。

Action(行动):如果符合执行条件,则执行Action(执行业务逻辑代码)。

当一个客户端Request请求进入Zuul网关服务时,网关先进入pre filter,进行一系列的验证、操作或者判断。然后交给routing filter进行路由转发,转发到具体的服务实例进行逻辑处理、返回数据。当具体的服务处理完后,最后由post filter进行处理,该类型的处理器处理完后,将Request 信息返回给客户端。

zuul的生命周期图

案例实战

新建spring boot工程,引入maven依赖

Application类使用@EnableZuulProxy注解,开启Zuul功能

application.yml

这里配置了两种路由策略

一个是api-a:用来拦截请求路径以/api-a/**开头的,如果是这个路径请求,转发到service-ribbon服务。

一个是api-b:用来拦截请求路径是/api-b/**开头的,如果是这个路径请求,转发到service-one服务。

猜你喜欢

转载自blog.csdn.net/u012373281/article/details/86541535