2016-07-14 3 views
1

私はjax-rs 2クライアントAPIを使用してRESTクライアントを設定しています。 api docでは、「クライアントは、クライアント側の通信インフラストラクチャを管理する重いオブジェクトです。クライアントインスタンスの初期化と破棄は、かなり高価な操作である可能性があります。アプリケーション内のクライアントインスタンス。 (https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client.html)。このステートメントでは、Clientはスレッドセーフではないと思います。すべての要求に対して単一のClientインスタンスを使用すべきではありません。Jax rsクライアントプール

私はCXFの実装を使用していますが、これまでのところ、クライアントオブジェクトのプールを設定する方法が見つかりませんでした。

誰でも情報を持っている場合は、これを共有してください。

ありがとうございます。

答えて

0

デフォルトでは、CXFはin-JDKのHttpURLConnectionオブジェクトに基づくトランスポートを使用してHTTP要求を実行します。

永続的な接続が複数のHTTP要求に対して基盤となるソケット接続を再利用できるように接続プーリングが実行されます。プール(デフォルト値)を設定するために、これらのシステムプロパティを設定

http.keepalive=true 
http.maxConnections=5 

インクリメント同時に宛先ごとに、生きて保持されるアイドル接続の最大数を設定するhttp.maxConnectionsの値。この記事で

は、いくつかの詳細を説明しているproperties.htmlプロパティのこの link完全なリストでご覧くださいどのようにデフォルトのJAX-RSクライアントはスレッドセーフではありませんことを

Java HttpURLConnection and pooling

注意も作品によってデフォルト。適切な使用の制限を確認するhere

同時に実行される多くのリクエストが必要な場合、CXFは非同期のApache HttpAsyncClientも使用できます。 SERは、サーバー上で)ここに

http://cxf.apache.org/docs/asynchronous-client-http-transport.html

+0

の詳細を私たちはちょうどClientBuilder.newClientを(初期化http.maxConnections = 5で起動し、我々は、JAX-RSクライアントのプールを持っているのだろうか? –

+0

はい、そうです。 'http.maxConnections'のプールのデフォルト値は5です。このため、何も設定する必要はありません。 'Client'チェックを再利用する予定がある場合は、http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-ThreadSafety – pedrofb

+0

Thanks @ pedrofbにあるスレッドセーフティの考慮事項についても、私はこれを試し、それがうまくいくならば答えを受け入れるだろう。 –