когда будет вызван webClient в webflux - PullRequest
0 голосов
/ 19 февраля 2020

Реактор http работает как холодный, запускается только при вызове подписки или блокировки. Хотя на практике говорят, что когда сопоставленный (или flatMapped, значение справа от ->) результат необходим (или потребляется), он вызывается. Затем я заметил, что log.info("{}", resultOfMap) недостаточно для его вызова, но function return from resultOfMap достаточно. Есть ли логическая причина для этого, например "в чем разница между потребителем журнала и потребителем возврата функции с точки зрения реактора" , или мы играем "игра в прятки и эврика? "

public Mono<ServerResponse> postMethod(ServerRequest req) {
     req.bodyToMono(T.class)
            .map(t -> fromTtoD(t))
            .flatMap(d ->
                this.webClient
                    .post()
                    .uri(serverUri)
                    .body(BodyInserters.fromObject(d))
                    .retrieve()
                    .bodyToMono(E.class))
            .map(e -> log e and return e); // no! this would not make webClient called.
            .flatMap(e -> ServerResponse.ok().bodyValue(e).build()) // yes! when return this 
}
...