`
m635674608
  • 浏览: 5041927 次
  • 性别: 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/

分享到:
评论

相关推荐

    SpringCloud zuul jar包

    SpringCloud Zuul是Spring Cloud生态系统中的一个边缘服务和API网关组件。它的主要功能是作为微服务架构中的统一入口,负责路由转发、过滤器处理、负载均衡以及安全控制等任务。Zuul允许开发者在微服务架构中实现...

    深入理解Spring Cloud Zuul过滤器

    总结来说,Spring Cloud Zuul过滤器是构建强大API网关的关键工具,它们允许开发者在微服务架构中实现细粒度的控制,提高系统的灵活性和安全性。通过理解和熟练使用Zuul过滤器,可以更好地优化微服务之间的通信和边界...

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

    总结起来,Spring Cloud Zuul作为一个强大的API网关,能够有效地处理微服务架构中的路由和过滤任务,通过自定义过滤器实现各种业务逻辑,并通过Eureka实现高可用集群。结合Nginx等工具,可以构建出稳定且安全的...

    Spring Cloud(zuul)使用例子.zip

    这里的代码可能包括了Zuul过滤器的实现以及服务路由的配置。 学习这个例子,你可以了解如何设置Zuul的路由规则,创建自定义过滤器,以及如何与其他Spring Cloud组件(如Eureka和Hystrix)集成。通过实际操作,你会...

    springcloud zuul gateway 服务网关

    SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...

    spring cloud eureka zuul ribbon hystrix feign config 示例

    Zuul 提供了过滤器机制,可以实现请求的路由、负载均衡、认证、监控等功能,允许对来自客户端的请求进行预处理和后处理。 3. **Ribbon**:Ribbon是Netflix的客户端负载均衡器,它作为一个内嵌的组件被包含在服务...

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

    SpringCloud Zuul 过滤器是一个非常强大的工具,可以帮助开发者快速实现微服务架构中的 API 网关。 Zuul 过滤器可以对请求进行拦截、鉴权、限流、熔断等操作,实现了微服务架构中的安全性和可靠性。 在本文中,我们...

    使用Spring Cloud Netflix Zuul代理网关访问后台REST服务例子

    接着,你可以创建Zuul过滤器,通过实现`ZuulFilter`接口并覆盖`run()`方法来实现自定义逻辑。例如,创建一个简单的认证过滤器: ```java public class AuthFilter extends ZuulFilter { @Override public String ...

    spring cloud zuul

    压缩包中的 "spring cloud zuul" 可能包含了一个完整的 Spring Cloud Zuul 示例应用,它展示了如何配置和运行 Zuul 服务,包括如何定义路由、编写过滤器、集成安全组件等。这样的示例对于初学者理解和实践 Spring ...

    《深入理解Spring Cloud与微服务构建》学习笔记(十六)~路由网关Spring Cloud Zuul

    **三、Zuul过滤器的使用** 1. **创建自定义过滤器**:可以通过继承ZuulFilter抽象类并重写相关方法来创建自定义过滤器。每个过滤器都需要指定过滤类型和执行顺序。 2. **过滤器生命周期**:过滤器的生命周期包括四...

    springcloud zuul网关服务

    SpringCloud Zuul是基于Spring Cloud框架的一个核心组件,它扮演着API网关的角色,负责路由转发、过滤器处理以及安全控制等任务。Zuul的主要功能包括动态路由、过滤器机制、安全控制、负载均衡、健康检查等。下面将...

    《深入理解Spring Cloud与微服务构建》学习笔记(十八)~路由网关Spring Cloud Zuul~熔断器

    在深入探讨Spring Cloud和微服务构建的过程中,Spring Cloud Zuul是一个关键组件,它扮演着路由网关和熔断器的角色。本文将详细讲解Zuul的功能、原理以及如何在Spring Boot应用中集成和配置。 首先,Spring Cloud ...

    springcloud_zuul.zip

    此外,Zuul还包含了一些内置的过滤器,用于身份验证、日志记录、限流等功能。 在描述中提到的问题,即"相同服务部署两个节点,其中一个节点挂掉后,路由到停止节点熔断问题",涉及到的是服务容错管理。当一个服务...

    方志朋版——深入理解Spring Cloud与微服务构建.pdf

    最后,书中可能还会涵盖Spring Cloud Gateway,它是Spring Cloud的新一代API网关,相比Zuul,它提供了更强大的路由规则和过滤器功能。 总的来说,这本《深入理解Spring Cloud与微服务构建》将带领读者深入探索...

    《深入理解Spring Cloud与微服务构建》学习笔记(十七)~路由网关Spring Cloud Zuul~负载均衡

    在实践中,我们可以通过自定义Zuul过滤器实现特定的功能,比如添加日志、统计请求频率、进行权限校验等。这样不仅增强了系统的灵活性,还能提高代码的复用性。 总结来说,Spring Cloud Zuul作为微服务架构中的路由...

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

    2. **过滤器机制**:Zuul支持预过滤、路由过滤、post过滤和错误过滤四个阶段的过滤器,可以用于身份验证、日志记录、限流等场景。 3. **动态路由**:可以通过配置中心动态修改路由规则,适应业务变化的需求。 4. **...

    SpringCloud(zuul路由网关)

    在SpringCloud生态中,Zuul是一个重要的组件,它作为边缘服务或者说是API网关,承担着路由转发和过滤器的角色。下面将详细阐述Zuul在SpringCloud中的应用及其关键知识点。 1. **Zuul的基本概念** Zuul是由Netflix...

Global site tag (gtag.js) - Google Analytics