【发布时间】:2019-07-31 19:37:00
【问题描述】:
只是想知道有没有办法获取spring web-flux的web客户端的响应时间?
【问题讨论】:
标签: spring-webflux project-reactor
只是想知道有没有办法获取spring web-flux的web客户端的响应时间?
【问题讨论】:
标签: spring-webflux project-reactor
您也可以使用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
注意,elapsed() 耗尽了整个反应流,所以如果你在 webClient... 部分之前做某事,你应该在它之前放置一个 elapsed() - 这会重置计时器。
【讨论】:
使用 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()));
【讨论】: