2013-03-19 31 views
6

Tôi đang tạo một dịch vụ RESTEasy bằng cách sử dụng proxy của Khách hàng và nó hoạt động tốt cho đến nay. Tuy nhiên, tôi đã nhận thấy rằng trong một vài chức năng của tôi, tôi thấy cùng một dòng mã:Chi phí máy chủ RESTEasy của khách hàng?

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

Là nó tốt hơn để đi mà ra khỏi chức năng và làm cho nó một biến thành viên của lớp để giảm khả năng overhead ? Dịch vụ này sẽ xử lý tải 10000 reqs/phút. Cảm ơn

Trả lời

7

Bạn có thể chỉ định ứng dụng khách MyClass làm bean mùa xuân, chẳng hạn và đưa vào bất cứ nơi nào cần. Hãy nhận biết về an toàn luồng vì trình khách proxy RestEasy sử dụng bên dưới Apache Client Http của Commons và mặc định SimpleHttpConnectionManager không phải là luồng an toàn.

Để đạt được điều này trong một enironment đa luồng (chạy trong một Servlet container) làm điều này:

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

Cảm ơn! điều này sẽ làm cho thread-an toàn mã? – avillagomez

+1

@avillagomez - yes – emd

+0

@avillagomez - Chỉ cần đảm bảo ứng dụng MyClass là singleton (nó được khởi tạo chỉ một lần) – emd