6

我正在使用客户端代理创建一个 RESTEasy 服务,到目前为止它运行良好。但是,我确实注意到在我的一些函数中,我看到了相同的代码行:

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

将其从函数中取出并使其成为类的成员变量以减少可能的开销会更好吗?该服务将处理 10000 个请求/分钟的负载。谢谢

4

1 回答 1

7

例如,您可以将 MyClass 客户端指定为 spring bean,并在需要的地方注入它。请注意线程安全,因为 RestEasy 代理客户端在 Apache Commons Http 客户端下使用,并且默认情况下 SimpleHttpConnectionManager 不是线程安全的。

要在多线程环境中实现这一点(在 Servlet 容器中运行),请执行以下操作:

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);
于 2013-03-19T19:26:10.533 回答