我们将在春季Webflux中开始使用,并将带注释的控制器用于REST API。我们想测量Spring引导服务器处理请求所需的总时间。看来我们可以用弹簧 WebFilter 但是,我不确定如何设置StartTime(中的某种属性 ServerWebExchange 或其他请求标头)?此外,一旦响应完成,我们如何获得开始时间并计算时间差?
谢谢
是的,您可以使用 WebFilter 为了这个。请参见下面的示例代码:
WebFilter
@Component @Slf4j public class RequestTimingFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { long startMillis = System.currentTimeMillis(); return chain.filter(exchange) .doOnSuccess(aVoid -> log.info("Elapsed Time: {}ms", System.currentTimeMillis() - startMillis) ); } }
请注意 doOnSuccess 调用,仅在请求成功时执行。对于错误,可以添加 doOnError 致电查看请求时间。
doOnSuccess
doOnError