gpt4 book ai didi

java - 在 REST 服务中创建 Jersey 客户端

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:01 24 4
gpt4 key购买 nike

我正在创建一个使用其他 http REST 服务的 http REST 服务。

我正在使用 Jersey Client 调用其他服务,我对 http 客户端的哪种创建模式最好有很多疑问。

目前,我正在使用 EJB 来注入(inject)客户端,该客户端是每个方法共享的单例,但我想删除 java ee 依赖项并使用 Jetty 作为嵌入式应用程序服务器。

我从the doc看到创建客户端是一项昂贵的操作,因此我无法每次需要时都创建一个客户端。

我认为在每个 Servlet/Rest 类的构造函数中创建 1 是更简单的解决方案,但我不确定 servlet 的生命周期(如果为每个请求创建一个实例,则此方法与上一页)

或者创建一个由每个 Servlet/Rest 类共享的 Singleton 可能会更好

或者可能更好的是 N 个客户端池。

关于最后两个解决方案,我需要一些建议...您认为更好的解决方案是什么?

谢谢

最佳答案

根据您的说法,在某些环境中部署了一个REST服务,并且有一个应用程序,一个客户端消费者,它想要访问该服务。

如果我使用 Jersey API 编写一个普通的 Java 类 作为客户端,那么我会写一些这样的东西:

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,它在您的应用程序中执行一些定义的工作,并且每次它都会使用客户端代码块调用REST Service当您访问 servlet 时,它每次都会创建一个 com.sun.jersey.api.client.Client 实例。

如果您想避免这种情况,那么您可以创建一个初始类,该类将创建一个且唯一的 com.sun.jersey.api.client.Client 实例,并将其设为静态且在任何需要的地方使用相同的引用。 WebResource 应在需要时创建,因为您可能有兴趣调用不同的 URI

如果我处于您的情况,我会遵循这种方法。

关于java - 在 REST 服务中创建 Jersey 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com