`
m635674608
  • 浏览: 4930975 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

深入解析Spring Cloud内置的Zuul过滤器

 
阅读更多

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客户端,例如

  1. Apache HttpClient:默认的HTTP客户端
  2. Squareup OkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true
  3. 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过滤器

    主要给大家介绍了关于Spring Cloud Zuul过滤器的相关资料,通过阅读本文您将了解:Zuul过滤器类型与请求生命周期、如何编写Zuul过滤器、如何禁用Zuul过滤器和Spring Cloud为Zuul编写的过滤器及其功能,需要的朋友可以...

    SpringCloud Zuul过滤器实现登陆鉴权代码实例

    主要介绍了SpringCloud Zuul过滤器实现登陆鉴权代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    22-Spring Cloud网关Zuul&过滤器&集群方案1

    实例化结果启动4个服务,分别输入如下图的URL,结果如下:日志:过滤器之间传递数据实际开发中,我们可能需要配置多个过滤器,比如第一个过滤器是校验用户名、密码,第

    spring cloud zuul

    Zuul的规则引擎允许通过任何JVM语言来编写规则和过滤器, 支持基于Java和Groovy的构建。(spring cloud zuul整合例子包能运行)

    SpringCloud——路由器和过滤器(Zuul)

    SpringCloud——路由器和过滤器(Zuul)之微服务网关的实现

    详解SpringCloud Zuul过滤器返回值拦截

    Zuul作为网关服务,是其他各服务对外中转站,通过Zuul进行请求转发。这篇文章主要介绍了详解SpringCloud Zuul过滤器返回值拦截,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Spring Cloud Zuul添加过滤器过程解析

    主要介绍了Spring Cloud Zuul添加过滤器过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    springcloud 中 zuul 修改请求参数信息的方法

    主要介绍了springcloud 中 zuul 修改请求参数信息的方法,需要的朋友可以参考下

    SpringCloud中集成Zuul网关.html

    SpringCloud中集成Zuul网关。 添加相关依赖,编写路由地址,添加过滤器可以在过滤器中对请求做其他操作 如验证是否登录、解密请求中的数据等

    SpringCloud Zuul过滤器和谷歌Gauva实现限流

    主要介绍了SpringCloud Zuul过滤器和谷歌Gauva实现限流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    spring-cloud使用的各种示例

    - [springcloud(十六):服务网关 Spring Cloud GateWay 服务化和过滤器](http://www.ityouknow.com/springcloud/2019/01/19/spring-cloud-gateway-service.html) - [springcloud(十七):服务网关 Spring Cloud ...

    spring boot+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使用详解

    主要介绍了spring cloud-zuul的Filter使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    新版本SpringCloud2学习手册

    网关与过滤器区别 49 Nginx与Zuul的区别 49 Zuul网关 49 动态网关 53 网关集群 55 分布式配置中心SrpingCloud config 57 SpringCloud分布式配置中心 57 Config架构 58 Git环境搭建 58 服务端详解 58 Maven...

    springboot+springcloud 第9篇

    此文件是springboot跟springcloud的整合,搭建一个eureka的服务注册中心,并有服务提供者跟 ribbon消费者和feign...Zuul自定义路由规则,过滤器。博客原文:https://blog.csdn.net/u013083284/article/details/83688008

    sample-zuul-filters:用于Spring Cloud Netflix的自定义Zuul 1过滤器的示例

    Zuul过滤器样本 运行3个应用程序类作为spring boot应用程序。 ZuulGatewayApplication :在端口8080上运行zuul FooApplication :在端口9080上托管/foo服务 BarApplication :在端口7080上托管具有不同实现的/foo...

    Spring Cloud 阶段性开发与测试

    本代码的主要内容为 Spring Cloud 阶段性开发与测试的源码包,主要分为以下几个模块: 001-项目基础模块; 002-接入Eureka注册中心以及Eureka集群; 003-接入Ribbon负载均衡客户端组件; 004-接入Feign负载均衡...

Global site tag (gtag.js) - Google Analytics