Получить время отклика веб-клиента web-flux - PullRequest
3 голосов
/ 10 марта 2019

Просто хотите узнать, есть ли способ получить время отклика веб-клиента Spring Web-Flux?

Ответы [ 2 ]

3 голосов
/ 11 марта 2019

у вас также есть возможность использовать 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 голос
/ 10 марта 2019

В 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()));
...