基本上,我正在使用Apache Axis2。使用它,我可以更改所需的任何超时,但是没有标题的超时。我正在使用Java和Eclipse。
我有一个项目,我们正在测试一些Web服务。在它上面,我正在使用 ServiceClient 和 Options 实施测试,更改其具有的超时属性。
但是,我可以更改以下3个超时参数中的2个: -http.connection-manager.timeout(无法更改)。 -http.connection.timeout(可以更改)。 -http.socket.timeout(可以更改)。
我尝试了很多方法来尝试更改第一个,但我还没有找到如何做的方法。
如下所示,“ 600000 ”值是我可以更改的字段,而“ 30000”是我不能更改的字段(我认为默认值为30000)。
我将向您展示我正在处理的部分代码以及控制台输出。
[CODE]
int timeoutMS = 600000;
ServiceClient serviceClient = stub._getServiceClient();
Options options = serviceClient.getOptions();
options.setTimeOutInMilliSeconds(timeoutMS);
options.setProperty(HTTPConstants.SO_TIMEOUT, timeoutMS);
options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, timeoutMS);
[控制台输出]
[DEBUG 2019/01/10 16:15:15,236] Set parameter http.connection-manager.timeout = 30000
[DEBUG 2019/01/10 16:15:15,237] Set parameter http.connection.timeout = 600000
[DEBUG 2019/01/10 16:15:15,237] Set parameter http.socket.timeout = 600000
如您所见,我的预期结果是三个参数的值均为“ 600000”,但第一个参数默认保留该值。
谢谢!
答案 0 :(得分:0)
我在工作中偶然发现了同样的问题。经过几个小时的研究,我们终于找到了该解决方案的近似值。这是我们得到的:
MultiThreadedHttpConnectionManager connectionManager;
void configureCachedHttpClient() {
connectionManager = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = connectionManager.getParams();
params.setConnectionTimeout(timeout); // set connection timeout (how long it takes to connect to remote host)
params.setSoTimeout(timeout); // set socket timeout (how long it takes to retrieve data from remote host)
params.setDefaultMaxConnectionsPerHost(maxTotalConnections);
params.setMaxTotalConnections(maxTotalConnections);
HttpClient httpClient = null;
try {
httpClient = new HttpClient(connectionManager);
HttpConnectionManagerParams connectionManagerParams = httpClient.getHttpConnectionManager().getParams();
connectionManagerParams.setParameter("http.connection-manager.timeout", timeout); // set timeout on how long we'll wait for a connection from the pool
context.setProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER, connectionManager);
context.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
context.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true);
// context.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION, true);
} catch (Exception e) {
// Exception e
httpClient = null;
e.printStackTrace();
} finally {
httpClient = null;
}
}
正如您所陈述的那样,上述代码段中的行需要更改'http.connection-manager.timeout'属性。必须实例化“ org.apache.commons.httpclient.MultiThreadedHttpConnectionManager”,并初始化一个“ org.apache.commons.httpclient.HttpClient”对象,以便对其进行进一步配置。设置完所需的设置后,我们必须设置最后3个属性,如下所示。
在配置和设置它之后,Axis将使用我们在最后设置的那个httpclient实例;因此,到Web服务的每个新连接/通信都将按照所述进行预配置。
希望这可以为您提供帮助;如果还不够完善,我感到抱歉。 如果需要,将完成此答案。
[编辑]
正如您所显示的,以下是我们的日志的摘录:
... [DEBUG 2019/01/22 17:42:30.719] Set parameter http.connection.timeout = 120000 [DEBUG 2019/01/22 17:42:30.719] Set parameter http.socket.timeout = 120000 [DEBUG 2019/01/22 17:42:30.719] Set parameter http.connection-manager.max-per-host = {HostConfiguration[]=2} [DEBUG 2019/01/22 17:42:30.719] Set parameter http.connection-manager.max-total = 2 [DEBUG 2019/01/22 17:42:31.597] Set parameter http.connection-manager.timeout = 120000 ...