如何在SpringCloudGateway中正确测量下游响应时间?

rsaldnfx  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(941)

在SpringCloudGateway中,我想测量下游请求到底需要多长时间,以便将其与所需的完成时间(下游服务时间+SpringCloudGateway的处理时间)进行比较。
我实现了一个 GlobalFilter 在哪一个前面测量 NettyRoutingFilter . 不过,这也包括事件循环处理的一部分(据我所知)。至少在负载下,这里测量的时间与已知下游服务的响应时间不相关。
基本简化方法:

class ProxyResponseTimeFilter
  implements GlobalFilter, Ordered
{
  @Override
  public int getOrder()
  {
    // see NettyRoutingFilter
    return Ordered.LOWEST_PRECEDENCE - 1;
  }

  @Override
  public Mono<Void> filter(final ServerWebExchange exchange, final GatewayFilterChain chain)
  {
    return chain.filter(exchange).transformDeferred(request ->
    {
      final long start = System.nanoTime();
      return request.doFinally(s ->
      {
        final long duration = System.nanoTime() - start;
        System.out.println(exchange.getRequest().getPath() + " " + TimeUnit.NANOSECONDS.toMillis(duration));
      });
    });
  }
}

我正在使用spring cloud hoxton.sr9。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题