只想知道是否有任何方法可以获取spring web-flux的Web客户端的响应时间?
答案 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()));