我该如何更改 "http.connection-manager.timeout"?

How could I change "http.connection-manager.timeout"?

基本上,我使用的是 Apache Axis2。使用它,我可以更改任何我想要的超时,但不是标题的超时。我正在使用 Java 和 Eclipse。

我有一个项目,我们正在测试一些 Web 服务。在上面,我正在使用 ServiceClientOptions 实施测试,更改它具有的超时属性。

但是,我可以更改以下 3 个超时参数中的 2 个: - http.connection-manager.timeout(无法更改)。 - http.connection.timeout(可以更改)。 - http.socket.timeout(可以更改)。

我已经尝试了很多方法来尝试改变第一个,但我没有找到如何去做。

正如您在下面看到的,“600000”值是我可以更改的字段,而“30000”是不能更改的字段(我认为 30000 是默认值)。

我将向您展示我正在处理的代码部分和控制台输出。


[代码]

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”,但第一个参数默认保留该值。

提前致谢!

我在工作中偶然发现了同样的问题。经过几个小时的研究,我们终于找到了解决方案的近似值。这是我们得到的:

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 服务的每个新 connection/communication 都将按照说明进行预配置。

希望对您有所帮助;如果不够完整,我很抱歉。 如果需要,将完成此答案。

[编辑]

正如您所提到的,这里是我们日志的摘录:

...
[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
...