Skip to content
Advertisement

Time Elapsed for Mono Webflux

I am calling a post endpoint that returns a Void. I am trying to get the time elapsed. It seems it is not calling an endpoint. doOnSuccess is also not getting called.

    public void createTask(CreateTaskDTO task) {
    
        client
                .post()
                .uri(path)
                .body(BodyInserters.fromValue(task))
                .exchangeToMono(response -> response.bodyToMono(Void.class))
                .elapsed()
                .doOnSuccess(
                        tuple -> {
                          
   Status.incrementTaskCreationCount(task.getLoginIds().size());
                          Status.incrementWriteCount();
                          log.info(
                                  "time taken by the ServiceImpl createTask=[{}] for {}",
                                  tuple.getT1(),
                                  task);
                        })
                .map(Tuple2::getT2)
                .subscribe();
    }

Advertisement

Answer

elapsed() measures the time between when the Mono is subscribed to and the moment the Mono emits an item. But, Mono<Void> response doesn’t emit any value.

You can use thenReturn to continue the sequence:

.exchangeToMono(response -> response.bodyToMono(Void.class))
.thenReturn(true)
.elapsed()
Advertisement