Websphere 中的 Jersey 客户端调用抛出 java.net.SocketTimeoutException
Jersey Client Call within Websephere throw java.net.SocketTimeoutException
我在 WebSphere Liberty 上的 Java Web 应用程序 运行 中使用 Jersey Client 来获取位于另一台服务器上的数据。我的网络调用是 HTTP POST,数据作为响应发送。对于少量数据,响应在几秒内返回,所以没有问题。当请求耗时较长时抛出异常。我注意到 1 分钟后
java.net.SocketTimeoutException: Read timed out
被抛出
我采用了相同的代码,并将其插入 public static void main。
在那里,即使请求需要3分钟,也没有超时。所以我想问题不在泽西岛,而是在 WebSphere 的某些参数上。
这里定义了一堆参数:
我尝试将 server.xml httpOptions
中的几个值:readTimeout
、persistTimeout
和 persistTimeout
增加到 600 秒,但它没有解决问题。我仍然在 1 分钟后超时。
是否有任何其他参数可以控制此行为?
最好的问候,
我找到了一个解决方案:可以在创建客户端之前在客户端构建器上设置不同的超时参数。
{
ClientBuilder cb = ClientBuilder.newBuilder()
cb.property("com.ibm.ws.jaxrs.client.timeout", "600000");
cb.property("com.ibm.ws.jaxrs.client.connection.timeout", "100000");
cb.property("com.ibm.ws.jaxrs.client.receive.timeout", "600000");
Client myclient = cb.build();
}
我在 WebSphere Liberty 上的 Java Web 应用程序 运行 中使用 Jersey Client 来获取位于另一台服务器上的数据。我的网络调用是 HTTP POST,数据作为响应发送。对于少量数据,响应在几秒内返回,所以没有问题。当请求耗时较长时抛出异常。我注意到 1 分钟后
java.net.SocketTimeoutException: Read timed out
被抛出
我采用了相同的代码,并将其插入 public static void main。 在那里,即使请求需要3分钟,也没有超时。所以我想问题不在泽西岛,而是在 WebSphere 的某些参数上。 这里定义了一堆参数:
我尝试将 server.xml httpOptions
中的几个值:readTimeout
、persistTimeout
和 persistTimeout
增加到 600 秒,但它没有解决问题。我仍然在 1 分钟后超时。
是否有任何其他参数可以控制此行为? 最好的问候,
我找到了一个解决方案:可以在创建客户端之前在客户端构建器上设置不同的超时参数。
{
ClientBuilder cb = ClientBuilder.newBuilder()
cb.property("com.ibm.ws.jaxrs.client.timeout", "600000");
cb.property("com.ibm.ws.jaxrs.client.connection.timeout", "100000");
cb.property("com.ibm.ws.jaxrs.client.receive.timeout", "600000");
Client myclient = cb.build();
}