一:特点:
路由+过滤器=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