2013-03-19 14 views
6

私はクライアントプロキシを使用してRESTEasyサービスを作成しています。しかし、私は私の機能のいくつかに、私は同じコード行を参照してくださいという通知をした:RESTEasyクライアントプロキシオーバーヘッド?

MyClass client = ProxyFactory.create(MyClass.class, "http://localhost:8080"); 

は、それがより良い機能の外にそれを取るし、可能なオーバーヘッドを低減すること、クラスのメンバ変数にすることです?このサービスは10000 reqs/minの負荷を処理します。ありがとう

答えて

7

たとえば、MyClassクライアントをSpring Beanとして指定し、必要な場所に挿入することができます。 RestEasyプロキシクライアントはApache Commons Http Clientの下で使用され、デフォルトではスレッドセーフではないSimpleHttpConnectionManagerが使用されるため、スレッドの安全性に注意してください。

MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); 
HttpClient httpClient = new HttpClient(connectionManager); 

// Only needed if you have a authentication 
Credentials credentials = new UsernamePasswordCredentials(username, password); 
httpClient.getState().setCredentials(AuthScope.ANY, credentials); 
httpClient.getParams().setAuthenticationPreemptive(true); 

clientExecutor = new ApacheHttpClientExecutor(httpClient); 

MyClass client = ProxyFactory.create(MyClass.class, "http://localhost:8080", clientExecutor); 
+0

ありがとう:マルチスレッドenironmentでこれを達成するために

(サーブレットコンテナで実行されているが)、これを行います!これはコードをスレッドセーフにしますか? – avillagomez

+1

@avillagomez - はい – emd

+0

@avillagomez - MyClassクライアントがシングルトンであることを確認してください(インスタンス化は1回だけです) – emd