获取Web客户端Web-flux的响应时间

时间:2019-03-10 08:18:16

标签: spring-webflux project-reactor

只想知道是否有任何方法可以获取spring web-flux的Web客户端的响应时间?

2 个答案:

答案 0 :(得分:1)

您还可以将elapsed()用于此类事情

webClient.get().uri("/bla").retrieve()
     .bodyToMono(String.class)
     .elapsed()  // map the stream's time into our streams data
     .doOnNext(tuple -> log.info("Milliseconds for retrieve()" + tuple.getT1())
     .map(tuple -> tuple.getT2()) // after outputting the measurement, return the data only

请注意,elapsed()消耗了整个响应流,因此,如果您要在webClient ...部分之前做某事,则应在此之前放置一个elapsed()-这将重置计时器。

答案 1 :(得分:0)

使用Spring Boot,您可以为此内置指标。参见issue

如果要实现自定义秒表,可以执行以下操作:

Mono<String> resultMono = Mono.subscriberContext()
        .flatMap(context -> webClient.get()
                .uri("/foo")
                .retrieve()
                .bodyToMono(String.class)
                .doOnNext(ignored -> log.info("Execution duration is {} ms",
                        System.currentTimeMillis() - context.<Long>get("stopWatch"))))
        .subscriberContext(context -> context.put("stopWatch",
                System.currentTimeMillis()));