Как я могу изменить «http.connection-manager.timeout»? - PullRequest
0 голосов
/ 10 января 2019

В основном я использую Apache Axis2. Работая с ним, я могу изменить любой тайм-аут, какой захочу, но без названия. Я работаю с Java и Eclipse.

У меня есть проект, в котором мы тестируем некоторые веб-сервисы. На нем я реализую тест с использованием ServiceClient и Options , изменяя свойства времени ожидания, которое у него есть.

Однако я могу изменить 2 из 3 параметров тайм-аута: - 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", но первый сохраняет значение по умолчанию.

Заранее спасибо!

1 Ответ

0 голосов
/ 22 января 2019

Я наткнулся на эту же проблему на работе. После нескольких часов исследований мы наконец нашли приближение к решению. Вот что у нас есть:

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, который мы установили в конце; поэтому каждое новое соединение / связь с веб-службой будет предварительно сконфигурировано, как указано.

Надеюсь, это поможет вам; Извините, если это не достаточно полно. Завершит этот ответ при необходимости.

[EDIT]

Как вы показываете вопрос, вот выдержка из нашего журнала:

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