Class PoolingHttpClientConnectionManager
- All Implemented Interfaces:
Closeable
,AutoCloseable
,HttpClientConnectionManager
,org.apache.hc.core5.io.ModalCloseable
,org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
,org.apache.hc.core5.pool.ConnPoolStats<HttpRoute>
ClientConnectionPoolManager
maintains a pool of
ManagedHttpClientConnection
s and is able to service connection requests
from multiple execution threads. Connections are pooled on a per route
basis. A request for a route which already the manager has persistent
connections for available in the pool will be serviced by leasing
a connection from the pool rather than creating a new connection.
ClientConnectionPoolManager
maintains a maximum limit of connection
on a per route basis and in total. Connection limits, however, can be adjusted
using ConnPoolControl
methods.
Total time to live (TTL) set at construction time defines maximum life span of persistent connections regardless of their expiration setting. No persistent connection will be re-used past its TTL value.
- Since:
- 4.3
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AtomicBoolean
private org.apache.hc.core5.function.Resolver
<HttpRoute, ConnectionConfig> private final HttpClientConnectionOperator
private final org.apache.hc.core5.http.io.HttpConnectionFactory
<ManagedHttpClientConnection> static final int
static final int
private static final PrefixedIncrementingId
private static final org.slf4j.Logger
private final org.apache.hc.core5.pool.ManagedConnPool
<HttpRoute, ManagedHttpClientConnection> private org.apache.hc.core5.function.Resolver
<HttpRoute, org.apache.hc.core5.http.io.SocketConfig> private org.apache.hc.core5.function.Resolver
<org.apache.hc.core5.http.HttpHost, TlsConfig> -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
PoolingHttpClientConnectionManager
(HttpClientConnectionOperator httpClientConnectionOperator, org.apache.hc.core5.pool.ManagedConnPool<HttpRoute, ManagedHttpClientConnection> pool, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) protected
PoolingHttpClientConnectionManager
(HttpClientConnectionOperator httpClientConnectionOperator, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) PoolingHttpClientConnectionManager
(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry) PoolingHttpClientConnectionManager
(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) PoolingHttpClientConnectionManager
(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive) PoolingHttpClientConnectionManager
(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive, SchemePortResolver schemePortResolver, DnsResolver dnsResolver, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) PoolingHttpClientConnectionManager
(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) PoolingHttpClientConnectionManager
(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.util.TimeValue timeToLive, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) -
Method Summary
Modifier and TypeMethodDescriptioncast
(ConnectionEndpoint endpoint) void
close()
void
close
(org.apache.hc.core5.io.CloseMode closeMode) void
void
closeIdle
(org.apache.hc.core5.util.TimeValue idleTime) (package private) void
closeIfExpired
(org.apache.hc.core5.pool.PoolEntry<HttpRoute, ManagedHttpClientConnection> entry) void
connect
(ConnectionEndpoint endpoint, org.apache.hc.core5.util.TimeValue timeout, org.apache.hc.core5.http.protocol.HttpContext context) Connects the endpoint to the initial hop (connection target in case of a direct route or to the first proxy hop in case of a route via a proxy or multiple proxies).int
org.apache.hc.core5.http.io.SocketConfig
Deprecated.int
getMaxPerRoute
(HttpRoute route) int
org.apache.hc.core5.pool.PoolStats
org.apache.hc.core5.pool.PoolStats
org.apache.hc.core5.util.TimeValue
Deprecated.Returns aLeaseRequest
object which can be used to obtain aConnectionEndpoint
to cancel the request by callingCancellable.cancel()
.void
release
(ConnectionEndpoint endpoint, Object state, org.apache.hc.core5.util.TimeValue keepAlive) Releases the endpoint back to the manager making it potentially re-usable by other consumers.private ConnectionConfig
resolveConnectionConfig
(HttpRoute route) private org.apache.hc.core5.http.io.SocketConfig
resolveSocketConfig
(HttpRoute route) private TlsConfig
resolveTlsConfig
(org.apache.hc.core5.http.HttpHost host) private org.apache.hc.core5.util.TimeValue
resolveValidateAfterInactivity
(ConnectionConfig connectionConfig) void
setConnectionConfigResolver
(org.apache.hc.core5.function.Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver) SetsResolver
ofConnectionConfig
on a per route basis.void
Sets the sameConnectionConfig
for all routesvoid
setDefaultMaxPerRoute
(int max) void
setDefaultSocketConfig
(org.apache.hc.core5.http.io.SocketConfig config) Sets the sameSocketConfig
for all routesvoid
setDefaultTlsConfig
(TlsConfig config) Sets the sameConnectionConfig
for all hostsvoid
setMaxPerRoute
(HttpRoute route, int max) void
setMaxTotal
(int max) void
setSocketConfigResolver
(org.apache.hc.core5.function.Resolver<HttpRoute, org.apache.hc.core5.http.io.SocketConfig> socketConfigResolver) SetsResolver
ofSocketConfig
on a per route basis.void
setTlsConfigResolver
(org.apache.hc.core5.function.Resolver<org.apache.hc.core5.http.HttpHost, TlsConfig> tlsConfigResolver) SetsResolver
ofTlsConfig
on a per host basis.void
setValidateAfterInactivity
(org.apache.hc.core5.util.TimeValue validateAfterInactivity) Deprecated.void
upgrade
(ConnectionEndpoint endpoint, org.apache.hc.core5.http.protocol.HttpContext context) Upgrades transport security of the given endpoint by using the TLS security protocol.
-
Field Details
-
LOG
private static final org.slf4j.Logger LOG -
DEFAULT_MAX_TOTAL_CONNECTIONS
public static final int DEFAULT_MAX_TOTAL_CONNECTIONS- See Also:
-
DEFAULT_MAX_CONNECTIONS_PER_ROUTE
public static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE- See Also:
-
connectionOperator
-
pool
-
connFactory
private final org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory -
closed
-
socketConfigResolver
private volatile org.apache.hc.core5.function.Resolver<HttpRoute,org.apache.hc.core5.http.io.SocketConfig> socketConfigResolver -
connectionConfigResolver
private volatile org.apache.hc.core5.function.Resolver<HttpRoute,ConnectionConfig> connectionConfigResolver -
tlsConfigResolver
private volatile org.apache.hc.core5.function.Resolver<org.apache.hc.core5.http.HttpHost,TlsConfig> tlsConfigResolver -
INCREMENTING_ID
-
-
Constructor Details
-
PoolingHttpClientConnectionManager
public PoolingHttpClientConnectionManager() -
PoolingHttpClientConnectionManager
public PoolingHttpClientConnectionManager(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry) -
PoolingHttpClientConnectionManager
public PoolingHttpClientConnectionManager(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) -
PoolingHttpClientConnectionManager
public PoolingHttpClientConnectionManager(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.util.TimeValue timeToLive, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) -
PoolingHttpClientConnectionManager
public PoolingHttpClientConnectionManager(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive) -
PoolingHttpClientConnectionManager
public PoolingHttpClientConnectionManager(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) -
PoolingHttpClientConnectionManager
public PoolingHttpClientConnectionManager(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive, SchemePortResolver schemePortResolver, DnsResolver dnsResolver, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) -
PoolingHttpClientConnectionManager
@Internal protected PoolingHttpClientConnectionManager(HttpClientConnectionOperator httpClientConnectionOperator, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory) -
PoolingHttpClientConnectionManager
@Internal protected PoolingHttpClientConnectionManager(HttpClientConnectionOperator httpClientConnectionOperator, org.apache.hc.core5.pool.ManagedConnPool<HttpRoute, ManagedHttpClientConnection> pool, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
-
-
Method Details
-
close
public void close()- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
close
public void close(org.apache.hc.core5.io.CloseMode closeMode) - Specified by:
close
in interfaceorg.apache.hc.core5.io.ModalCloseable
-
cast
private PoolingHttpClientConnectionManager.InternalConnectionEndpoint cast(ConnectionEndpoint endpoint) -
resolveSocketConfig
-
resolveConnectionConfig
-
resolveTlsConfig
-
resolveValidateAfterInactivity
private org.apache.hc.core5.util.TimeValue resolveValidateAfterInactivity(ConnectionConfig connectionConfig) -
lease
-
lease
public LeaseRequest lease(String id, HttpRoute route, org.apache.hc.core5.util.Timeout requestTimeout, Object state) Description copied from interface:HttpClientConnectionManager
Returns aLeaseRequest
object which can be used to obtain aConnectionEndpoint
to cancel the request by callingCancellable.cancel()
.Please note that newly allocated endpoints can be leased
disconnected
. The consumer of the endpoint is responsible for fully establishing the route to the endpoint target by callingHttpClientConnectionManager.connect(ConnectionEndpoint, TimeValue, HttpContext)
in order to connect directly to the target or to the first proxy hop, and optionally callingHttpClientConnectionManager.upgrade(ConnectionEndpoint, HttpContext)
method to upgrade the underlying transport to Transport Layer Security after having executed aCONNECT
method to all intermediate proxy hops.- Specified by:
lease
in interfaceHttpClientConnectionManager
- Parameters:
id
- unique operation ID ornull
.route
- HTTP route of the requested connection.requestTimeout
- lease request timeout.state
- expected state of the connection ornull
if the connection is not expected to carry any state.
-
release
public void release(ConnectionEndpoint endpoint, Object state, org.apache.hc.core5.util.TimeValue keepAlive) Description copied from interface:HttpClientConnectionManager
Releases the endpoint back to the manager making it potentially re-usable by other consumers. Optionally, the maximum period of how long the manager should keep the connection alive can be defined usingvalidDuration
andtimeUnit
parameters.- Specified by:
release
in interfaceHttpClientConnectionManager
- Parameters:
endpoint
- the managed endpoint.state
- the new connection state ofnull
if state-less.keepAlive
- the duration of time this connection is valid for reuse.
-
connect
public void connect(ConnectionEndpoint endpoint, org.apache.hc.core5.util.TimeValue timeout, org.apache.hc.core5.http.protocol.HttpContext context) throws IOException Description copied from interface:HttpClientConnectionManager
Connects the endpoint to the initial hop (connection target in case of a direct route or to the first proxy hop in case of a route via a proxy or multiple proxies).- Specified by:
connect
in interfaceHttpClientConnectionManager
- Parameters:
endpoint
- the managed endpoint.timeout
- connect timeout.context
- the actual HTTP context.- Throws:
IOException
-
upgrade
public void upgrade(ConnectionEndpoint endpoint, org.apache.hc.core5.http.protocol.HttpContext context) throws IOException Description copied from interface:HttpClientConnectionManager
Upgrades transport security of the given endpoint by using the TLS security protocol.- Specified by:
upgrade
in interfaceHttpClientConnectionManager
- Parameters:
endpoint
- the managed endpoint.context
- the actual HTTP context.- Throws:
IOException
-
closeIdle
public void closeIdle(org.apache.hc.core5.util.TimeValue idleTime) - Specified by:
closeIdle
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
closeExpired
public void closeExpired()- Specified by:
closeExpired
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
getRoutes
- Specified by:
getRoutes
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
getMaxTotal
public int getMaxTotal()- Specified by:
getMaxTotal
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
setMaxTotal
public void setMaxTotal(int max) - Specified by:
setMaxTotal
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
getDefaultMaxPerRoute
public int getDefaultMaxPerRoute()- Specified by:
getDefaultMaxPerRoute
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
setDefaultMaxPerRoute
public void setDefaultMaxPerRoute(int max) - Specified by:
setDefaultMaxPerRoute
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
getMaxPerRoute
- Specified by:
getMaxPerRoute
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
setMaxPerRoute
- Specified by:
setMaxPerRoute
in interfaceorg.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
-
getTotalStats
public org.apache.hc.core5.pool.PoolStats getTotalStats()- Specified by:
getTotalStats
in interfaceorg.apache.hc.core5.pool.ConnPoolStats<HttpRoute>
-
getStats
- Specified by:
getStats
in interfaceorg.apache.hc.core5.pool.ConnPoolStats<HttpRoute>
-
setDefaultSocketConfig
public void setDefaultSocketConfig(org.apache.hc.core5.http.io.SocketConfig config) Sets the sameSocketConfig
for all routes -
setSocketConfigResolver
public void setSocketConfigResolver(org.apache.hc.core5.function.Resolver<HttpRoute, org.apache.hc.core5.http.io.SocketConfig> socketConfigResolver) SetsResolver
ofSocketConfig
on a per route basis.- Since:
- 5.2
-
setDefaultConnectionConfig
Sets the sameConnectionConfig
for all routes- Since:
- 5.2
-
setConnectionConfigResolver
public void setConnectionConfigResolver(org.apache.hc.core5.function.Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver) SetsResolver
ofConnectionConfig
on a per route basis.- Since:
- 5.2
-
setDefaultTlsConfig
Sets the sameConnectionConfig
for all hosts- Since:
- 5.2
-
setTlsConfigResolver
public void setTlsConfigResolver(org.apache.hc.core5.function.Resolver<org.apache.hc.core5.http.HttpHost, TlsConfig> tlsConfigResolver) SetsResolver
ofTlsConfig
on a per host basis.- Since:
- 5.2
-
closeIfExpired
void closeIfExpired(org.apache.hc.core5.pool.PoolEntry<HttpRoute, ManagedHttpClientConnection> entry) -
getDefaultSocketConfig
Deprecated.Use customsetConnectionConfigResolver(Resolver)
-
getValidateAfterInactivity
Deprecated.- Since:
- 4.4
-
setValidateAfterInactivity
@Deprecated public void setValidateAfterInactivity(org.apache.hc.core5.util.TimeValue validateAfterInactivity) Deprecated.Defines period of inactivity after which persistent connections must be re-validated prior to beinglease(String, HttpRoute, Object)
leased} to the consumer. Negative values passed to this method disable connection validation. This check helps detect connections that have become stale (half-closed) while kept inactive in the pool.- Since:
- 4.4
-
setConnectionConfigResolver(Resolver)