2つのマイクロサービス(AとB)があります。非同期HTTP要求と新しいスレッドのHTTP要求の比較
Aには、POST要求を受け入れるエンドポイントがあります。ユーザーがPOSTリクエストを行うと、次のようになります。
- サービスAはPOST要求本体からオブジェクトを取り出し、データベースに格納します。
- サービスAは、オブジェクトを別のオブジェクトに変換します。新しいオブジェクトはJersey HTTPクライアント経由でサービスBに送信されます。
ステップ2は、作成したJavaスレッドプール(Executors.newCachedThreadPool)で実行されます。新しいスレッドでステップ2を実行することにより、サービスAのエンドポイントの応答時間には影響しません。
しかし、サービスBが応答するのに時間がかかる場合、サービスAは、多くのPOST要求を受信しているときに、多すぎるスレッドを作成する可能性があります。これを解決するために、固定スレッドプール(Exectuors.newFixedThreadPool)を使用できます。
固定スレッドプールに加えて、非同期非ブロッキングHTTPクライアントも使用する必要がありますか?ここのような:https://hc.apache.org/httpcomponents-asyncclient-dev/。私が使用するJersey HTTPクライアントはブロックしています。
非同期HTTPクライアントを使用するのは正しいと思われます。 固定のスレッドプールに切り替えると、非同期HTTPクライアントは大きな利点をもたらさないと私は思っています。