我有一个用apache-cxf(v3.3.2)生成的SOAP客户端。
客户端使用嵌入式Tomcat在Spring Boot应用程序中运行。
如何为该SOAP客户端指定保持活动超时?
到目前为止,我发现:
用于建立连接的套接字在5秒钟后关闭。
此超时是底层sun.net.www.http.HttpClient中的硬编码默认值。它不受tomcat连接超时或com.sun.xml.internal.ws.request.timeout属性的控制。
仅当服务器以Keep-Alive标头响应时(例如Keep-Alive:timeout = 60,max = 100):see line 752,才设置HttpClient.keepAliveTimeout变量。
服务器不提供此标头。
根据this answer,这是预期的行为,但确实如此:
客户端无法指定超时,这是服务器配置
确定最大超时值。额外的Keep-Alive标头
可以告知客户端服务器愿意保留多长时间
连接打开...
最佳答案
尝试直接通过HTTPClientPolicy进行设置。我在CXF客户端中使用它。
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
// Set connection timeout
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(30000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setReceiveTimeout(30000);
http.setClient(httpClientPolicy);