Resttemplateを使用して複数の非同期HTTPリクエスト

サム:

私は複数のURLを呼び出すためにスプリングRestTemplateを使用してサービスを提供しています。

パフォーマンスを向上させるために、私は、並行してこれらの要求を実行したいと思います。私には2つのオプションは以下のとおりです。

  • 活用のJava 8の並列ストリームは、一般的なプールをフォークジョイン
  • 分離されたスレッドプールを使用してcompletable未来

そのI / O呼び出しをブロックするとパラレル・ストリームを使用することをお勧めしている場合だけ不思議?

ソティリオスDelimanolis:

Aは、ForkJoinPoolプロパティを盗むその作業の利点のいずれかを獲得していないので、IOの作業を行うための理想的ではありません。あなたが使用することを計画している場合commonPool、あなたのアプリの他の部分を同様に、あなたはそれらを妨げるかもしれませんでした。専用のスレッドプールは、ExecutorService例えば、おそらくこれら二つの間のよりよい解決策です。

私ももっと良いものを提案したいと思います。代わりに、すべての非同期ラッピングコードを自分で書くので、Springの使用を検討してくださいAsyncRestTemplateこれは、春のWebライブラリに含まれているとそのAPIはほぼ同じですRestTemplate

非同期クライアント側のHTTPアクセスのためのSpringの中心的クラス。同様の方法を公開RestTemplateするが、戻りのListenableFuture具体的な結果とは対照的に、ラッパー。

[...]

注:デフォルトでは、AsyncRestTemplateHTTP接続を確立するために、標準のJDK施設に依存しています。あなたは受諾コンストラクタを使用することにより、このようなApacheのHttpComponents、ネッティー、およびOkHttpなど、さまざまなHTTPライブラリを使用するように切り替えることができますAsyncClientHttpRequestFactory

ListenableFutureインスタンスは、容易に変換することができCompletableFutureてインスタンスListenableFuture::completable()

Javadocの中で述べたように、あなたが指定して使用するメカニズム非同期かを制御することができますAsyncClientHttpRequestFactoryリストされた各ライブラリの実装では、組み込みの数があります。内部的には、これらのライブラリのいくつかは、あなたが提案し何と専用のスレッドプールにIOをブロックし実行することがあります。(メモリが提供する場合)その他、ネッティーのように、接続を実行するために、非ブロッキングIOを使用しています。あなたはそれからいくつかの利益を得るかもしれません。

そして、それはあなたが結果を減らす方法あなた次第です。ではCompletableFuture、あなたがアクセスしていanyOfallOfヘルパーとの組み合わせのインスタンスメソッドのいずれかを。

例えば、

URI exampleURI = URI.create("https://www.stackoverflow.com");

AsyncRestTemplate template = new AsyncRestTemplate/* specific request factory*/();
var future1 = template.exchange(exampleURI, HttpMethod.GET, null, String.class).completable();
var future2 = template.exchange(exampleURI, HttpMethod.GET, null, String.class).completable();
var future3 = template.exchange(exampleURI, HttpMethod.GET, null, String.class).completable();

CompletableFuture.allOf(future1, future2, future3).thenRun(() -> {
    // you're done
});

AsyncRestTemplate以来、春のWebフラックス」の賛成で廃止されましたWebClient(それはあなたが戻って取得してみましょうないと言うことを除いて、私はそれにはなりませんので、このAPIはかなり異なっているCompletableFutureとしても)。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=199944&siteId=1
おすすめ