在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。
暂无答案!
目前还没有任何答案,快来回答吧!