java - 我怎么能改变 "http.connection-manager.timeout"?

标签 java eclipse http service axis2

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

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

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

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

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

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


[代码]

int timeoutMS = 600000;

ServiceClient serviceClient = stub._getServiceClient();

选项 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] 设置参数 http.connection-manager.timeout = 30000

[DEBUG 2019/01/10 16:15:15,237] 设置参数 http.connection.timeout = 600000

[DEBUG 2019/01/10 16:15:15,237] 设置参数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 服务的新连接/通信都将按规定进行预配置。

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

[编辑]

正如您在问题中所展示的,这是我们日志的摘录:

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

关于java - 我怎么能改变 "http.connection-manager.timeout"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54132034/

相关文章:

java - 如何在 java 中对 UDP 数据包进行 ip 欺骗/更改源地址/原始套接字编程?

java - 使用 int-ws 上的 spring 集成处理 Http 错误 :outbound-gateway

java - HttpServlet层次解释

node.js - Docker:从容器到其他容器的 http 请求停滞

java - LeetCode 的二和问题 : Brute force solution approach not working?

Java - 使用 JFileChooser 将字符串路径存储在表中,获取设置方法?

Java JPA/Hibernate 反模式

java - 在 Eclipse 中将对象贡献转换为菜单贡献

java - Eclipse 在 ant build 上用完了堆空间

java - 如何实现 PushCacheFilter