Spring Weflux Rest API(带注释的控制器)的总处理时间

Leo*_*nce 3 spring spring-boot spring-webflux

我们开始使用 Spring Webflux,我们正在为 REST API 使用带注释的控制器。我们想测量 Spring 引导服务器处理请求所需的总时间。看起来我们可以使用 Spring WebFilter但是我不确定如何设置 StartTime(ServerWebExchange或其他请求标头中的某种属性)?此外,一旦响应完成,我们如何获得 startTime 并计算时间差?

谢谢!

Mur*_*kan 8

是的,您可以WebFilter为此使用 a 。请参阅下面的示例代码:

@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)
            );
    }
}
Run Code Online (Sandbox Code Playgroud)

注意doOnSuccess调用,它只在请求成功时执行。对于错误,您可以添加doOnError调用以查看请求时间。