Java RESTEasy客户端代理开销?

Java RESTEasy客户端代理开销?,java,proxy,resteasy,Java,Proxy,Resteasy,我正在使用客户端代理创建一个RESTEasy服务,到目前为止它运行良好。但是,我确实注意到,在我的一些函数中,我看到了相同的代码行: MyClass client = ProxyFactory.create(MyClass.class, "http://localhost:8080"); 将其从函数中去掉并使其成为类的成员变量以减少可能的开销是否更好?此服务将处理10000 reqs/min的负载。谢谢,例如,您可以将MyClass客户端指定为Springbean,并在需要时将其注入任何地方。

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

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

将其从函数中去掉并使其成为类的成员变量以减少可能的开销是否更好?此服务将处理10000 reqs/min的负载。谢谢,例如,您可以将MyClass客户端指定为Springbean,并在需要时将其注入任何地方。请注意线程安全性,因为RestEasy代理客户端在Apache Commons Http客户端下使用,并且默认情况下使用SimpleHttpConnectionManager,它不是线程安全的

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


@avillagomez-只要确保MyClass客户端是单例的(它只实例化一次)您只实例化一次是什么意思?每次调用都将执行此代码。这意味着它将为每个调用创建一个代理。。。我错过什么了吗?是的。创建一个代理并重用它。没有理由在每次通话时都创建代理。好的,谢谢!!我将把这段代码移到应用程序构造函数中,并在需要重用同一代理的地方创建引用
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);