Spring Cloud默认为Zuul编写并启用了一些过滤器,这些过滤器有什么作用呢?我们不妨按照@EnableZuulServer、@EnableZuulProxy两个注解进行展开,相信大家对这两个注解都不陌生(至少都见过吧)。如果觉得陌生也没有关系,可将@EnableZuulProxy简单理解为@EnableZuulServer的增强版。事实上,当Zuul与Eureka、Ribbon等组件配合使用时,
@EnableZuulProxy是我们常用的注解。
在Spring Cloud的官方文档中,只说@EnableZuulServer是一个“空白”的Zuul,那么究竟空白在什么地方呢?与@EnableZuulProxy到底有什么区别呢?诸多问题,都将在本文找到答案。
在此之前,我们先理解什么是RequestContext:
RequestContext:用于在过滤器之间传递消息。它的数据保存在每个请求的ThreadLocal中。它用于存储请求路由到哪里、错误、HttpServletRequest、HttpServletResponse都存储在RequestContext中。RequestContext扩展了ConcurrentHashMap,所以,任何数据都可以存储在上下文中。
@EnableZuulServer过滤器
一、pre类型过滤器
(1) ServletDetectionFilter:该过滤器用于检查请求是否通过Spring Dispatcher。检查后,通过isDispatcherServletRequest设置布尔值。
(2) FormBodyWrapperFilter:解析表单数据,并为请求重新编码。
(3) DebugFilter:顾名思义,调试用的过滤器,可以通过zuul.debug.request=true
,或在请求时,加上debug=true
的参数,例如$ZUUL_HOST:ZUUL_PORT/path?debug=true
开启该过滤器。这样,该过滤器就会把RequestContext.setDebugRouting()
、RequestContext.setDebugRequest()
设为true。
二、route类型过滤器
SendForwardFilter:该过滤器使用Servlet RequestDispatcher转发请求,转发位置存储在RequestContext.getCurrentContext().get("forward.to")
中。可以将路由设置成:
1
2
3
4
5
|
zuul: routes:
abc:
path: /abc/**
url: forward:/abc
|
然后访问$ZUUL_HOST:ZUUL_PORT/abc
,观察该过滤器的执行过程。
三、post类型过滤器
SendResponseFilter:将Zuul所代理的微服务的的响应写入当前响应。
四、error类型过滤器
SendErrorFilter:如果RequestContext.getThrowable()
不为null,那么默认就会转发到/error,也可以设置error.path
属性修改默认的转发路径。
@EnableZuulProxy过滤器
如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会安装以下过滤器:
一、pre类型过滤器
PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。
二、route类型过滤器
(1) RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get("serviceId")
中。该过滤器可使用不同的HTTP客户端,例如
- Apache HttpClient:默认的HTTP客户端
- Squareup OkHttpClient v3:如需使用该客户端,需保证
com.squareup.okhttp3
的依赖在classpath中,并设置ribbon.okhttp.enabled = true
。 - Netflix Ribbon HTTP client:设置
ribbon.restclient.enabled = true
即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。
(2) SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost()
中。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
原文链接:http://www.itmuch.com/spring-cloud/zuul/zuul-filter-in-spring-cloud/
相关推荐
主要给大家介绍了关于Spring Cloud Zuul过滤器的相关资料,通过阅读本文您将了解:Zuul过滤器类型与请求生命周期、如何编写Zuul过滤器、如何禁用Zuul过滤器和Spring Cloud为Zuul编写的过滤器及其功能,需要的朋友可以...
主要介绍了SpringCloud Zuul过滤器实现登陆鉴权代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
实例化结果启动4个服务,分别输入如下图的URL,结果如下:日志:过滤器之间传递数据实际开发中,我们可能需要配置多个过滤器,比如第一个过滤器是校验用户名、密码,第
Zuul的规则引擎允许通过任何JVM语言来编写规则和过滤器, 支持基于Java和Groovy的构建。(spring cloud zuul整合例子包能运行)
SpringCloud——路由器和过滤器(Zuul)之微服务网关的实现
Zuul作为网关服务,是其他各服务对外中转站,通过Zuul进行请求转发。这篇文章主要介绍了详解SpringCloud Zuul过滤器返回值拦截,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了Spring Cloud Zuul添加过滤器过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了springcloud 中 zuul 修改请求参数信息的方法,需要的朋友可以参考下
SpringCloud中集成Zuul网关。 添加相关依赖,编写路由地址,添加过滤器可以在过滤器中对请求做其他操作 如验证是否登录、解密请求中的数据等
主要介绍了SpringCloud Zuul过滤器和谷歌Gauva实现限流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
- [springcloud(十六):服务网关 Spring Cloud GateWay 服务化和过滤器](http://www.ityouknow.com/springcloud/2019/01/19/spring-cloud-gateway-service.html) - [springcloud(十七):服务网关 Spring Cloud ...
├40 6.11-1 Zuul过滤器.avi ├41 6.11-2禁用Zuul的过滤器.avi ├42 7.1 Spring Cloud Config简介.avi ├43 7.2 编写Config Server.avi ├44 7.3 编写Config Client.avi ├45 7.4 Git仓库配置详解.avi ├46 7.5配置...
主要介绍了spring cloud-zuul的Filter使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
网关与过滤器区别 49 Nginx与Zuul的区别 49 Zuul网关 49 动态网关 53 网关集群 55 分布式配置中心SrpingCloud config 57 SpringCloud分布式配置中心 57 Config架构 58 Git环境搭建 58 服务端详解 58 Maven...
此文件是springboot跟springcloud的整合,搭建一个eureka的服务注册中心,并有服务提供者跟 ribbon消费者和feign...Zuul自定义路由规则,过滤器。博客原文:https://blog.csdn.net/u013083284/article/details/83688008
Zuul过滤器样本 运行3个应用程序类作为spring boot应用程序。 ZuulGatewayApplication :在端口8080上运行zuul FooApplication :在端口9080上托管/foo服务 BarApplication :在端口7080上托管具有不同实现的/foo...
本代码的主要内容为 Spring Cloud 阶段性开发与测试的源码包,主要分为以下几个模块: 001-项目基础模块; 002-接入Eureka注册中心以及Eureka集群; 003-接入Ribbon负载均衡客户端组件; 004-接入Feign负载均衡...