我正在创建一个使用其他http REST服务的http REST服务。
我正在使用Jersey客户端来调用其他服务,我很怀疑http客户端的哪种创建模式是最好的。
目前我正在使用EJB注入每个方法共享的Singleton客户端,但我想删除java ee依赖项并将Jetty用作嵌入式应用程序服务器。
我从the doc看到客户端创建是一项昂贵的操作,所以每次我需要它时都无法创建。
我认为在每个Servlet / Rest类的构造函数中创建1是更简单的解决方案,但我不确定servlet的生命周期(如果为每个请求创建一个实例,这个方法与前)
或者最好是创建每个Servlet / Rest类共享的Singleton
或者更好的是N客户端池。
关于最后两个解决方案,我需要一些建议......您认为这是更好的解决方案吗?
由于
答案 0 :(得分:0)
根据您的说法,在某些环境中部署了REST Service
,并且有一个应用程序client
或consumer
,它希望访问该服务。
如果我使用Jersey API编写一个普通的Java class
客户端,那么我会写一些石灰:
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
Client client = Client.create();
WebResource webResource = client
.resource("http://localhost:8080/rest/example/employees");
ClientResponse response = webResource.accept("application/json")
.get(ClientResponse.class);
String result = response.getEntity(String.class);
现在假设您正在编写servlet
,它在您的应用程序中执行某些已定义的作业,并且每次访问{{1}时,它都会使用客户端代码块调用REST Service
它每次都会创建一个servlet
的实例。
如果你想避免这种情况,那么你可以创建一个初始类,它将创建com.sun.jersey.api.client.Client
的实例,只有一个,并使其成为静态,并在任何你想要的地方使用相同的引用。应在需要时创建com.sun.jersey.api.client.Client
,因为您可能有兴趣拨打不同的WebResource
。
如果我在你的情况下,我会遵循这种方法。