Java Play2アプリは、同期サードパーティクライアントライブラリを介してデータを取得するために、いくつかの外部Webサービスを呼び出しています。このアプリでは、高いトラフィックとスケーラビリティが必要です。Play 2:play.libs.WS非同期処理用サードパーティ製クライアントライブラリ
プレイドキュメントは言う:サードパーティのクライアントライブラリ(すなわち、ない 使用してプレイの非同期WSのAPI) を介してREST/WebサービスAPIを使用して :
ケースがブロックする可能性があり、あなたのコードが含まれている場合...]
あなたがブロッキングコードをFuturesにラップすることができます。 これは
は対照的に、IOの次の種類がブロックされません[...]、それだけでブロッキングが別のスレッドで発生することを意味し、それは非を遮断することはありません。 プレイWSのAPI、 ...
デフォルトの再生プールがFuturタスクに使用されるため、Play2 Javaアプリケーションでは、約束事を使用して非同期にすることは実際には役に立ちません。その結果、多くのFuturを使用すると、大きなプールのデフォルトのスレッドで同期呼び出しのみを使用する場合と同じ結果になります。同じプール内のスレッドの数はおおよそ同じです。
は、だから私の質問は以下のとおりです。
- が本当に非同期(プレイ・デフォルト・プール内の任意のスレッドをブロックしていない)のJava APIでplay.libs.WS APIですか?
- 高いトラフィックとスケーラビリティが必要な場合は、サードパーティのクライアントライブラリではなく、常にそれを使用する必要があります
- play.libs.WS APIで使用されるスレッドプールは何ですか? WS呼び出し?
- play.libs.WS APIのように非同期になる方法は、サードパーティの同期クライアントを先物でラップすることですか?
どうもありがとう
ロイック
コードを見ると、play.libs.WSは(AsyncCompletionHandlerを使用して)Nettyプールを使用しているようです。 私はそうですか? –
Loic