httpClient中的timeout的配置

近日在用solrCloud的时候出现了一些状况,在进行查询的时候,由于某些节点的响应速度过慢导致整个请求响应的很慢,我们的解决办法是设置超时时间,也就是如果某些shard的响应太慢,则干脆忽略他的响应。这要涉及到配置httpClient的多个timeout,于是重新学习了一下HttpClient的三个配置,从源码中得到解释,然后做了个例子验证了源码的解释(我使用的httppClient的版本是4.5.2)。

httpClient的三个timeout分别是:connectionRequestTimeout、connectionTimeout、socketTimeout,先看源码中的解释吧:

1、connectionRequestTimeout

 /**
     * Returns the timeout in milliseconds used when requesting a connection
     * from the connection manager. A timeout value of zero is interpreted
     * as an infinite timeout.
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getConnectionRequestTimeout() {
        return connectionRequestTimeout;
    }

这个表示从connection manager中获得一个connection的超时时间,也就是从连接池中拿到一个connection的最大时间(连接池的原理我还没有研究),0表示没有任何的限制,如果是-1表示依赖于平台。

2、connectionTimeout

 /**
     * Determines the timeout in milliseconds until a connection is established.
     * A timeout value of zero is interpreted as an infinite timeout.
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getConnectTimeout() {
        return connectTimeout;
    }

这个表示建立连接的最大时间,这个有点不太懂,前面的connectionRequestTimeout不是已经说过获得connection了吗?为啥这里还说建立连接的时间?

3、socketTimeout

    /**
     * Defines the socket timeout ({@code SO_TIMEOUT}) in milliseconds,
     * which is the timeout for waiting for data  or, put differently,
     * a maximum period inactivity between two consecutive data packets).
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getSocketTimeout() {
        return socketTimeout;
    }

等待一个数据包的最大时间,这个倒是很简单。 

猜你喜欢

转载自suichangkele.iteye.com/blog/2362070