我是否可以仅使用Zuul后置过滤器获取请求的响应时间?

时间:2018-06-08 14:45:56

标签: java spring-cloud netflix-zuul spring-cloud-netflix netflix-ribbon

我目前正在使用Zuul作为反向代理,使用Ribbon作为负载均衡器,使用Eureka作为服务发现。

是否可以仅使用Zuul后置过滤器获取请求的响应时间?我还可以获取进入和离开网关的请求的时间戳吗?

1 个答案:

答案 0 :(得分:1)

我猜这可能,但它会涉及过滤器,restTemplate拦截器和servlet过滤器类的组合

我已经给出了图表,因为他们已经成为了stackoverflow的植物插件

想法是,创建一个preFilter让我们说TimeTrackerFilter会添加入口点时间戳" time-start-id"在请求头中,userContextFilter将拦截所有传入的HTTP请求并将HTTP请求映射到userContext类,UserContextClass由getter / setter组成 从java.lang.ThreadLocal

检索和存储值的方法

UserContextHolder.java将UserContext存储在ThreadLocal变量中,该变量可由处理用户请求的线程调用的任何方法访问

UserContextINterceptor类注入" time-start-id"从休息模板

执行的任何传出的基于http的服务请求

一个后置过滤器,它实际上会从请求上下文中获取time-start-id,计算时间差异并添加一个新的标题"所用的时间"值与时间差异到响应

如果你不想在被调用的其他服务中看到开始时间id,只使用pre和post过滤器就足够了(在这种情况下忽略userContext和拦截器)

注意:  当您想要为HTTP请求标头添加值时,您使用RequestContext的addZuulRequestHeader() 方法。此方法将维护添加的HTTP标头的单独映射 当一个请求通过Zuul服务器流过过滤器时。数据结果 在目标服务所在的ZuulRequestHeader映射中将被合并 由Zuul服务器调用。