2017-05-24 10 views
3

バックエンドジョブ(実行可能なjar)にreactive rel API(spring webfluxで構築)を使用する必要があります。WebClientを使用してReactive Spring Rest APIを使用する方法

私はSpring WebClientについて読んだことがありますが、私はいくつかの点を理解していません。例えば

:最後の行で

WebClient webClient = WebClient.create("http://localhost:8080"); 

Mono<Person> person = webClient.get() 
     .uri("/persons/{id}", 42) 
     .accept(MediaType.APPLICATION_JSON) 
     .exchange() 
     .then(response -> response.bodyToMono(Person.class)); 

は、 "bodyToMono" があります。だからそれは私の質問です:

呼び出されている残りのAPIが既にリアクティブサービスの場合は、応答をモノに変換する必要がありますか?私は行方不明のいくつかの点はありますか?

私の見解では、私のレストAPIが反応的であることをコードに明示する方法があると思いますが、おそらく私が気づいていないものです。

答えて

5

はい、必須です。 リアクティブであるという考えは、IOのためにスレッドがブロックされていないことを確認することです。

サーバー側のサービスを無効にしている可能性がありますが、サーバーからの応答がない限り、クライアントがブロックされているときに得られるメリットを消費すると、クライアントスレッドは、サーバーが応答するまで待機し続けます。それは望ましくない。

webClient.get() 
     .uri("/persons/{id}", 42) 
     .accept(MediaType.APPLICATION_JSON) 
     .exchange().block() 

は、サーバーが応答するまで現在のクライアントスレッドをブロックします。これにより、クライアントスレッドがブロックされる可能性があります。

webClient.get() 
     .uri("/persons/{id}", 42) 
     .accept(MediaType.APPLICATION_JSON) 
     .exchange() 
     .then(response -> response.bodyToMono(Person.class)); 

将来的に単一の値を出すことができるサイト運営者への参照です。したがって、クライアントスレッドはブロックされません。

私はこれ以上詳しく説明しています。 https://dzone.com/articles/spring-5-reactive-web-services

関連する問題