Zuul网关 @EnableZuulProxy 和 @EnableZuulServer 的区别

本文详细介绍了Zuul的过滤器机制,包括pre、route、post和error类型的过滤器,以及它们在微服务架构中的作用。在@EnableZuulProxy下,还涉及到PreDecorationFilter和RibbonRoutingFilter等增强功能,解释了如何配置和使用这些过滤器进行服务路由和负载均衡。此外,还提到了SpringCloud如何根据@EnableZuulProxy添加额外的过滤器以实现更复杂的路由和错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. @EnableZuulProxy

EnableZuulProxy

2. @EnableZuulServer

EnableZuulServer

3.解释

@EnableZuulProxy简单理解为@EnableZuulServer的增强版,当Zuul与Eureka、Ribbon等组件配合使用时,我们使用@EnableZuulProxy

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. zuul: 
  2. routes: 
  3. abc:  
  4. path: /abc/** 
  5. url: forward:/abc 
然后访问$ZUUL_HOST:ZUUL_PORT/abc,观察该过滤器的执行过程。

 

post类型过滤器

  SendResponseFilter:将Zuul所代理的微服务的响应写入当前响应。

 

error类型过滤器

  SendErrorFilter:如果RequestContext.getThrowable()不为null,那么默认就会转发到/error,也可以设置error.path属性修改默认的转发路径。

 

 

2)如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会增加以下过滤器:

pre类型过滤器

  PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。

 

route类型过滤器

  (1) RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get("serviceId")中。

  该过滤器可使用不同的HTTP客户端,例如

  Apache HttpClient:默认的HTTP客户端

  SquareupOkHttpClient 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()中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值