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



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

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

我想这是可能的,但它将涉及过滤器、restTemplate 拦截器和 servlet 过滤器类的组合

我已经给出了图表,如果他们是堆栈溢出的 Planuml 插件

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

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

UserContextINterceptor 类,用于将"time-start-id"注入从 rest 模板执行的任何基于 http 的传出服务请求

一个后过滤器,它实际上将从请求上下文中获取时间开始ID,计算时间差异并添加一个新的标头"花费的时间",其值是响应的时间差异

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

: 当您想向 HTTP 请求标头添加值时,请使用 RequestContext 的 addZuulRequestHeader(( 方法。此方法将维护已添加的 HTTP 标头的单独映射 当请求流经 Zuul 服务器的过滤器时。数据控制 当目标服务为 由您的 Zuul 服务器调用。

最新更新