What does setDefaultMaxPerRoute and setMaxTotal mean in HttpClient?

白昼怎懂夜的黑 提交于 2021-02-05 20:00:40

问题


I am using Apache HttpClient in one of my project. I am also using PoolingHttpClientConnectionManager along with my HttpClient as well.

I am confuse what are these properties mean. I tried going through documentation in the code but I don't see any documentation around these variables so was not able to understand.

  • setMaxTotal
  • setDefaultMaxPerRoute
  • setConnectTimeout
  • setSocketTimeout
  • setConnectionRequestTimeout
  • setStaleConnectionCheckEnabled

Below is how I am using in my code:

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5 * 1000).setSocketTimeout(5 * 1000)
        .setStaleConnectionCheckEnabled(false).build();
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setMaxTotal(200);
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(20);

CloseableHttpClient httpClientBuilder = HttpClientBuilder.create()
        .setConnectionManager(poolingHttpClientConnectionManager).setDefaultRequestConfig(requestConfig)
        .build();

Can anyone explain me these properties so that I can understand and decide what values I should put in there. Also, are there any other properties that I should use apart from as shown above to get better performance?

I am using http-client 4.3.1


回答1:


Some parameters are explained at http://hc.apache.org/httpclient-3.x/preference-api.html

Others must be gleaned from the source.

  • setMaxTotal

The maximum number of connections allowed across all routes.

  • setDefaultMaxPerRoute

The maximum number of connections allowed for a route that has not been specified otherwise by a call to setMaxPerRoute. Use setMaxPerRoute when you know the route ahead of time and setDefaultMaxPerRoute when you do not.

  • setConnectTimeout

How long to wait for a connection to be established with the remote server before throwing a timeout exception.

  • setSocketTimeout

How long to wait for the server to respond to various calls before throwing a timeout exception. See http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_TIMEOUT for details.

  • setConnectionRequestTimeout

How long to wait when trying to checkout a connection from the connection pool before throwing an exception (the connection pool won't return immediately if, for example, all the connections are checked out).

  • setStaleConnectionCheckEnabled

Can be disabled for a slight performance improvement at the cost of potential IOExceptions. See http://hc.apache.org/httpclient-3.x/performance.html#Stale_connection_check



来源:https://stackoverflow.com/questions/30689995/what-does-setdefaultmaxperroute-and-setmaxtotal-mean-in-httpclient

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!