Jersey作为REST客户端,维护连接(或验证连接)

时间:2013-08-01 14:49:28

标签: rest connection jersey

我开始使用Jersey 2.1作为客户端,以便向其他人提供REST调用。

我一直在完成这些教程,我想我了解如何打开连接,并调用Web服务。

我的问题是,由于我的服务将持续存在,并且必须在事件发生时处理事件,我该如何管理和维护会话连接?

我一直试图了解我是否需要:

  1. 关闭连接?这似乎没有讨论过。那么在打电话后隐式自动关闭了吗?
  2. 如果没有自动关闭,我可以检查状态以查看Connection是否仍然有效吗?

2 个答案:

答案 0 :(得分:5)

为每个请求打开基础连接,并在收到响应并处理实体(读取实体)后关闭。

final WebTarget target = ... some web target
Response response = target.path("resource").request().get();
System.out.println("Connection is still open.");
System.out.println("string response: " + response.readEntity(String.class));
System.out.println("Now the connection is closed.");

如果您没有读取实体,则需要通过response.close()手动关闭响应。此外,如果实体被读入输入流(通过response.readEntity(InputStream.class)),则连接将保持打开状态,直到您完成从InputStream读取为止。在这种情况下,应该在从InputStream读取结束时手动关闭InputStream或Response。

答案 1 :(得分:1)

基于“this thread on MSDN”,关闭响应连接是从客户端角度维护应用程序性能的最佳实践之一。另外在另一方面,它也有助于关闭客户端连接。

要点是:

  • 收集/阅读客户端代码中所需的所有信息后关闭响应。
  • 在客户服务类中完成所有CRUD操作后关闭客户端连接。在服务调用期间遇到某种类型的连接/服务端点相关异常的情况下,这非常重要。
  • 还值得一提的是连接和读取时间。

示例:

client.setConnectTimeout(10000); //以毫秒为单位。

client.setReadTimeout(60000); //以毫秒为单位

希望这有帮助。