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/
相关推荐
SpringCloud Zuul是Spring Cloud生态系统中的一个边缘服务和API网关组件。它的主要功能是作为微服务架构中的统一入口,负责路由转发、过滤器处理、负载均衡以及安全控制等任务。Zuul允许开发者在微服务架构中实现...
总结来说,Spring Cloud Zuul过滤器是构建强大API网关的关键工具,它们允许开发者在微服务架构中实现细粒度的控制,提高系统的灵活性和安全性。通过理解和熟练使用Zuul过滤器,可以更好地优化微服务之间的通信和边界...
总结起来,Spring Cloud Zuul作为一个强大的API网关,能够有效地处理微服务架构中的路由和过滤任务,通过自定义过滤器实现各种业务逻辑,并通过Eureka实现高可用集群。结合Nginx等工具,可以构建出稳定且安全的...
这里的代码可能包括了Zuul过滤器的实现以及服务路由的配置。 学习这个例子,你可以了解如何设置Zuul的路由规则,创建自定义过滤器,以及如何与其他Spring Cloud组件(如Eureka和Hystrix)集成。通过实际操作,你会...
SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...
Zuul 提供了过滤器机制,可以实现请求的路由、负载均衡、认证、监控等功能,允许对来自客户端的请求进行预处理和后处理。 3. **Ribbon**:Ribbon是Netflix的客户端负载均衡器,它作为一个内嵌的组件被包含在服务...
SpringCloud Zuul 过滤器是一个非常强大的工具,可以帮助开发者快速实现微服务架构中的 API 网关。 Zuul 过滤器可以对请求进行拦截、鉴权、限流、熔断等操作,实现了微服务架构中的安全性和可靠性。 在本文中,我们...
接着,你可以创建Zuul过滤器,通过实现`ZuulFilter`接口并覆盖`run()`方法来实现自定义逻辑。例如,创建一个简单的认证过滤器: ```java public class AuthFilter extends ZuulFilter { @Override public String ...
压缩包中的 "spring cloud zuul" 可能包含了一个完整的 Spring Cloud Zuul 示例应用,它展示了如何配置和运行 Zuul 服务,包括如何定义路由、编写过滤器、集成安全组件等。这样的示例对于初学者理解和实践 Spring ...
**三、Zuul过滤器的使用** 1. **创建自定义过滤器**:可以通过继承ZuulFilter抽象类并重写相关方法来创建自定义过滤器。每个过滤器都需要指定过滤类型和执行顺序。 2. **过滤器生命周期**:过滤器的生命周期包括四...
SpringCloud Zuul是基于Spring Cloud框架的一个核心组件,它扮演着API网关的角色,负责路由转发、过滤器处理以及安全控制等任务。Zuul的主要功能包括动态路由、过滤器机制、安全控制、负载均衡、健康检查等。下面将...
在深入探讨Spring Cloud和微服务构建的过程中,Spring Cloud Zuul是一个关键组件,它扮演着路由网关和熔断器的角色。本文将详细讲解Zuul的功能、原理以及如何在Spring Boot应用中集成和配置。 首先,Spring Cloud ...
此外,Zuul还包含了一些内置的过滤器,用于身份验证、日志记录、限流等功能。 在描述中提到的问题,即"相同服务部署两个节点,其中一个节点挂掉后,路由到停止节点熔断问题",涉及到的是服务容错管理。当一个服务...
最后,书中可能还会涵盖Spring Cloud Gateway,它是Spring Cloud的新一代API网关,相比Zuul,它提供了更强大的路由规则和过滤器功能。 总的来说,这本《深入理解Spring Cloud与微服务构建》将带领读者深入探索...
在实践中,我们可以通过自定义Zuul过滤器实现特定的功能,比如添加日志、统计请求频率、进行权限校验等。这样不仅增强了系统的灵活性,还能提高代码的复用性。 总结来说,Spring Cloud Zuul作为微服务架构中的路由...
2. **过滤器机制**:Zuul支持预过滤、路由过滤、post过滤和错误过滤四个阶段的过滤器,可以用于身份验证、日志记录、限流等场景。 3. **动态路由**:可以通过配置中心动态修改路由规则,适应业务变化的需求。 4. **...
在SpringCloud生态中,Zuul是一个重要的组件,它作为边缘服务或者说是API网关,承担着路由转发和过滤器的角色。下面将详细阐述Zuul在SpringCloud中的应用及其关键知识点。 1. **Zuul的基本概念** Zuul是由Netflix...