spring cloud -->zuul 基本概念

一:特点:

路由+过滤器=Zuul

核心为一系列的过滤器

二:前置过滤器(Pre):

  这种过滤器在请求被路由之前调用,作用:

1.限流(流量过大时,依据某种规则把请求挡回去,后续的逻辑就不在处理了)

2.鉴权(如果发现没有访问权限,直接就拦截了 )

3.参数检验调整

三、ROUTING:

这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

四:后置过滤器(Post)

  这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等

1.统计

2.日志

五:异常处理器(error)

  在其他阶段发生错误时执行该过滤器,一般会在error类型和post类型过滤器中结合来处理。

服务调用时长统计:pre和post结合使用。

内置的特殊过滤器

zuul还提供了一类特殊的过滤器,分别为:StaticResponseFilter和SurgicalDebugFilter

StaticResponseFilter:StaticResponseFilter允许从Zuul本身生成响应,而不是将请求转发到源。

SurgicalDebugFilter:SurgicalDebugFilter允许将特定请求路由到分隔的调试集群或主机。


 

六、过滤器执行生命周期

这张是Zuul官网提供的请求生命周期图,清晰的表现了一个请求在各个过滤器的执行顺序。

正常流程:

  • 请求到达首先会经过pre类型过滤器,而后到达route类型,进行路由,请求就到达真正的服务提供者,执行请求,返回结果后,会到达post过滤器。而后返回响应。

异常流程:

  • 整个过程中,pre或者route过滤器出现异常,都会直接进入error过滤器,在error处理完毕后,会将请求交给POST过滤器,最后返回给用户。

  • 如果是error过滤器自己出现异常,最终也会进入POST过滤器,将最终结果返回给请求客户端。

  • 如果是POST过滤器出现异常,会跳转到error过滤器,但是与pre和route不同的是,请求不会再到达POST过滤器了。

七、springcloud中zuul和feign的应用场景和区别?

1、zuul作为整个应用的流量入口,接收所有的请求,如app、网页等,并且将不同的请求转发至不同的处理微服务模块,其作用可视为nginx。
2、feign则是将当前微服务的部分服务接口暴露出来,并且主要用于各个微服务之间的服务调用。
两者的应用层次以及原理均不相同。
3、zuul也含有hystrix和ribbon,基于http通讯的,可以直接代理服务就行。在它和服务间增加feign只会增加通讯消耗,没有特别的意义。feign在服务互相调用的时候用就行了,可以仿rpc通讯。
4、Feign主要作服务端流控,Feign的负载均衡是基于Eureka实现的
Zuul主要作客户端流控,并且Zuul的负载均衡结合Eureka实现易用性较好,并且Zuul我一般用在对第三方提供访问接口。

原文地址:

  https://blog.csdn.net/qq_33348135/article/details/104108668

  https://blog.csdn.net/weixin_42914675/article/details/84304890

  https://blog.csdn.net/weixin_34357267/article/details/85907679

原文地址:https://www.cnblogs.com/little-tech/p/13690656.html