Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HttpComponents PoolingHttpClientConnectionManager maxPerRoute and maxTotal?

Can someone please explain to me what setMaxPerRoute(max) and setMaxTotal(max) do in reference to HttpComponents PoolingHttpClientConnectionManager?

like image 956
james Avatar asked Jan 21 '26 15:01

james


1 Answers

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 of HttpRoute objects, which represent a chain of hosts each, like proxy1 -> 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.

like image 68
Jk1 Avatar answered Jan 23 '26 07:01

Jk1