Jestem nowy w Spring Reactive framework i próbuję wykonać wywołanie asynchroniczne przy użyciu Spring5 WebClient. Udało mi się pomyślnie wykonać to samo połączenie co synchroniczne. Ale napotykam problem z asynchronicznym wywołaniem.

Używam poniższego kodu, aby wykonać wywołanie asynchroniczne:

Mono<ClientResponse> reponse = WebClient.builder().build().post()
.uri("http://api.com")
.body(BodyInserters.fromObject("data"))
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer blahblahblahblah")
.exchange();

// couple of logger messages and other statements

Problem polega na tym, że nie wykonuje wywołania API i nie udziela odpowiedzi. Kontynuuje wykonywanie innych instrukcji, ale nigdy nie wywołuje wywołania API.

Nie chcę używać metody block(), ponieważ przekształci to w wywołanie synchronizacji.

Szukałem tak wielu witryn i dokumentacji, ale ten sam kod jest używany do wywołań asynchronicznych. Ale nie wiem, dlaczego to nie działa. Czy ktoś może mi pomóc, jeśli coś mi brakuje?

0
rupa 20 listopad 2019, 18:29
Jeśli jest to aplikacja webflux, prawdopodobnie nie powinieneś subskrybować. Inicjatorem połączenia jest abonent. Więc jeśli istnieje klient wywołujący, to ten klient wywołujący powinien być tym, który subskrybuje. Prosimy o przesłanie pełnego kodu.
 – 
Toerktumlare
21 listopad 2019, 00:01

1 odpowiedź

Poniższy kod może działać.

Mono<ClientResponse> reponse =
WebClient.builder().build().post()
.uri("http://api.com")
.body(BodyInserters.fromObject("data"))
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer blahblahblahblah")
.bodyToMono(ClientResponse.class)
.retrieve();
0
Gagan 24 czerwiec 2021, 01:32