Can someone please explain to me what setMaxPerRoute(max)
and setMaxTotal(max)
do in reference to HttpComponents PoolingHttpClientConnectionManager?
Asked
Active
Viewed 1.6k times
15

james
- 1,035
- 2
- 14
- 33
1 Answers
40
These settings control connection pool size.
setMaxTotal(max)
defines the overal connection limit for a conneciton pool.setMaxPerRoute(max)
defines a connection limit per one HTTP route. In simple cases you can understand this as a per target host limit. Under the hood things are a bit more interesting:HttpClient
maintains a couple ofHttpRoute
objects, which represent a chain of hosts each, likeproxy1 -> proxy2 -> targetHost
. Connections are pooled on per-route basis. In simple cases, when you're using default route-building mechanism and provide no proxy suport, your routes are likely to include target host only, so per-route connection pool limit effectively becomes per-host limit.
Example:
Suppose you have setMaxPerRoute(5)
and setMaxTotal(20)
. That means you can simultameously use up to 5 connections for every target host: 5 connections with google.com, another 5 connections with oracle.com and so on. The total amount of open connections can't however exceed 20 regardless of the number of hosts you're communicating with.

Jk1
- 11,233
- 9
- 54
- 64
maxPerRoute
? As I will be trying to request a lot of URL's from the same website (tens of thousands) using roughly 150 threads. – james Oct 13 '13 at 16:28