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

Trầ*_*ơng 5 project-reactor spring-webflux

只是想知道有没有什么办法可以得到spring web-flux的web客户端的响应时间?

Fri*_*ing 7

你也有可能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 retrieving {}", tuple.getT1()))
     .map(Tuple2::getT2) // after outputting the measurement, return the data only
Run Code Online (Sandbox Code Playgroud)

请注意,这会elapsed()耗尽整个反应流,因此如果您在 webClient... 部分之前执行某些操作,则应该在此之前放置一个 elapsed() - 这会重置计时器。


Ale*_*kin 4

借助 Spring Boot,您可以拥有内置的指标。参见问题。

如果你想实现自定义秒表,你可以这样做:

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