【发布时间】:2013-11-01 19:39:34
【问题描述】:
在球衣 1 中,我们在 com.sun.jersey.api.client.Client 类中有一个函数 setConnectTimeout。
在球衣 2 中,javax.ws.rs.client.Client 类用于缺少此功能的地方。
jersey 2.x中如何设置连接超时和读取超时?
【问题讨论】:
在球衣 1 中,我们在 com.sun.jersey.api.client.Client 类中有一个函数 setConnectTimeout。
在球衣 2 中,javax.ws.rs.client.Client 类用于缺少此功能的地方。
jersey 2.x中如何设置连接超时和读取超时?
【问题讨论】:
从球衣2.26(使用JAX-RS 2.1)开始有新的方法:
ClientBuilder builder = ClientBuilder.newBuilder()
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.readTimeout(5000, TimeUnit.MILLISECONDS);
//some more calls if necesary, e.g.
//.register(LoggingFilter.class);
Client restClient = builder.build();
【讨论】:
您还可以为每个请求指定超时时间:
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://1.2.3.4:8080");
// default timeout value for all requests
client.property(ClientProperties.CONNECT_TIMEOUT, 1000);
client.property(ClientProperties.READ_TIMEOUT, 1000);
try {
Invocation.Builder request = target.request();
// overriden timeout value for this request
request.property(ClientProperties.CONNECT_TIMEOUT, 500);
request.property(ClientProperties.READ_TIMEOUT, 500);
String responseMsg = request.get(String.class);
System.out.println("responseMsg: " + responseMsg);
} catch (ProcessingException pe) {
pe.printStackTrace();
}
}
【讨论】:
client = client.property(...),因为属性方法返回更新的可配置实例。与request 相同。
下面的代码在 Jersey 2.3.1 中适用于我(在此处找到灵感:https://stackoverflow.com/a/19541931/1617124)
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
client.property(ClientProperties.CONNECT_TIMEOUT, 1000);
client.property(ClientProperties.READ_TIMEOUT, 1000);
WebTarget target = client.target("http://1.2.3.4:8080");
try {
String responseMsg = target.path("application.wadl").request().get(String.class);
System.out.println("responseMsg: " + responseMsg);
} catch (ProcessingException pe) {
pe.printStackTrace();
}
}
【讨论】: