Zuul-@EnableZuulServer VS. @EnableZuulProxy

        Zuul为我们提供了两个主应用注解: @EnableZuulServer和@EnableZuulProxy,其中@EnableZuulProxy包含@EnableZuulServer的功能,而且还加入了@EnableCircuitBreaker和@EnableDiscoveryClient。当我们需要运行一个没有代理功能的Zuul服务,或者有选择的开关部分代理功能时,那么需要使用 @EnableZuulServer 替代 @EnableZuulProxy。 这时候我们可以添加任何 ZuulFilter类型实体类都会被自动加载,这和上一篇使用@EnableZuulProxy是一样,但不会自动加载任何代理过滤器。

 

1 @EnableZuulServer默认过滤器

当我们使用@EnableZuulServer时,默认所加载的过滤器有:

1.1  PRE类型过滤器

  • ServletDetectionFilter

该过滤器是最先被执行的。其主要用来检查当前请求是通过SpringDispatcherServlet处理运行的,还是通过ZuulServlet来处理运行的。判断结果会保存在isDispatcherServletRequest中,值类型为布尔型。

  • FormBodyWrapperFilter

该过滤器的目的是将符合要求的请求体包装成FormBodyRequestWrapper对象,以供后续处理使用。

  • DebugFilter

PRE类型过滤器。当请求参数中设置了debug参数时,该过滤器会将当前请求上下文中的RequestContext.setDebugRouting()RequestContext.setDebugRequest()设置为true,这样后续的过滤器可以根据这两个参数信息定义一些debug信息,当生产环境出现问题时,我们就可以通过增加该参数让后台打印出debug信息,以帮助我们进行问题分析。对于请求中的debug参数的名称,我们可以通过zuul.debug.parameter进行自定义。

1.2 ROUTE类型过滤器

  • SendForwardFilter

该过滤器只对请求上下文中存在forward.to(FilterConstants.FORWARD_TO_KEY)参数的请求进行处理。即处理之前我们路由规则中forward的本地跳转。

1.3 POST类型过滤器

  • SendResponseFilter

该过滤器就是对代理请求所返回的响应进行封装,然后作为本次请求的相应发送回给请求者。

1.4 Error类型过滤器

  • SendErrorFilter

该过滤器就是判断当前请求上下文中是否有异常信息(RequestContext.getThrowable()不为空),如果有则默认转发到/error页面,我们也可以通过设置error.path来自定义错误页面。

 

2 @EnableZuulProxy默认过滤器

@EnableZuulProxy则在上面的基础上增加以下过滤器:

2.1 PRE类型过滤器

  • PreDecorationFilter

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

2.2 ROUTE类型过滤器

  • RibbonRoutingFilter

该过滤器会针对上下文中存在serviceId(可以通过RequestContext.getCurrentContext().get(“serviceId”)获取)的请求进行处理,使用Ribbon、Hystrix和可插拔的HTTP客户端发送请求,并将服务实例的请求结果返回。也就是之前所说的只有当我们使用serviceId配置路由规则时Ribbon和Hystrix方才生效。

  • SimpleHostRoutingFilter

该过滤器检测到routeHost参数(可通过RequestContext.getRouteHost()获取)设置时,就会通过Apache HttpClient向指定的URL发送请求。此时,请求不会使用Hystrix命令进行包装,所以这类请求也就没有线程隔离和断路器保护。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值