org.apache.hc.client5.http.impl.nio

## Class PoolingAsyncClientConnectionManager

- java.lang.Object
- - org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager

All Implemented Interfaces:
  Closeable, AutoCloseable, AsyncClientConnectionManager, org.apache.hc.core5.io.ModalCloseable, org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>, org.apache.hc.core5.pool.ConnPoolStats<HttpRoute>

    @Contract(threading=SAFE_CONDITIONAL)
    public class PoolingAsyncClientConnectionManager
    extends Object
    implements AsyncClientConnectionManager, org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>

`PoolingAsyncClientConnectionManager` maintains a pool of non-blocking `HttpConnection`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 services by leasing a connection from the pool rather than creating a new connection.

`PoolingAsyncClientConnectionManager` maintains a maximum limit of connection on a per route basis and in total. Connection limits 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:
  5.0

### Field Summary

Fields
`static int` `DEFAULT_MAX_CONNECTIONS_PER_ROUTE`
`static int` `DEFAULT_MAX_TOTAL_CONNECTIONS`

### Constructor Summary

Constructors
`` `PoolingAsyncClientConnectionManager()`
`` `PoolingAsyncClientConnectionManager(AsyncClientConnectionOperator connectionOperator, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive, boolean messageMultiplexing)`
`` `PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup)`
`` `PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy, org.apache.hc.core5.util.TimeValue timeToLive)`
`` `PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup, 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)`
`` `PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup, org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy, org.apache.hc.core5.util.TimeValue timeToLive)`
`protected` `PoolingAsyncClientConnectionManager(org.apache.hc.core5.pool.ManagedConnPool<HttpRoute,ManagedAsyncClientConnection> pool, AsyncClientConnectionOperator connectionOperator)`

### Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods
`void` `close()`
`void` `close(org.apache.hc.core5.io.CloseMode closeMode)`
`void` `closeExpired()`
`void` `closeIdle(org.apache.hc.core5.util.TimeValue idletime)`

`Future<AsyncConnectionEndpoint>`

`connect(AsyncConnectionEndpoint endpoint, org.apache.hc.core5.reactor.ConnectionInitiator connectionInitiator, org.apache.hc.core5.util.Timeout timeout, Object attachment, org.apache.hc.core5.http.protocol.HttpContext context, org.apache.hc.core5.concurrent.FutureCallback<AsyncConnectionEndpoint> callback)`
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` `getDefaultMaxPerRoute()`
`int` `getMaxPerRoute(HttpRoute route)`
`int` `getMaxTotal()`
`Set<HttpRoute>` `getRoutes()`
`org.apache.hc.core5.pool.PoolStats` `getStats(HttpRoute route)`
`org.apache.hc.core5.pool.PoolStats` `getTotalStats()`
`org.apache.hc.core5.util.TimeValue` `getValidateAfterInactivity()` Deprecated. Use custom `setConnectionConfigResolver(Resolver)`
`boolean` `isClosed()` Method that can be called to determine whether the connection manager has been shut down and is closed or not.
`Future<AsyncConnectionEndpoint>` `lease(String id, HttpRoute route, Object state, org.apache.hc.core5.util.Timeout requestTimeout, org.apache.hc.core5.concurrent.FutureCallback<AsyncConnectionEndpoint> callback)` Returns a `Future` object which can be used to obtain an `AsyncConnectionEndpoint` or to cancel the request by calling `Future.cancel(boolean)`.
`void` `release(AsyncConnectionEndpoint 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.
`void` `setConnectionConfigResolver(org.apache.hc.core5.function.Resolver<HttpRoute,ConnectionConfig> connectionConfigResolver)` Sets `Resolver` of `ConnectionConfig` on a per route basis.
`void` `setDefaultConnectionConfig(ConnectionConfig config)` Sets the same `ConnectionConfig` for all routes
`void` `setDefaultMaxPerRoute(int max)`
`void` `setDefaultTlsConfig(TlsConfig config)` Sets the same `ConnectionConfig` for all hosts
`void` `setMaxPerRoute(HttpRoute route, int max)`
`void` `setMaxTotal(int max)`
`void` `setTlsConfigResolver(org.apache.hc.core5.function.Resolver<org.apache.hc.core5.http.HttpHost,TlsConfig> tlsConfigResolver)` Sets `Resolver` of `TlsConfig` on a per host basis.
`void` `setValidateAfterInactivity(org.apache.hc.core5.util.TimeValue validateAfterInactivity)` Deprecated. Use `setConnectionConfigResolver(Resolver)`.
`void` `upgrade(AsyncConnectionEndpoint endpoint, Object attachment, org.apache.hc.core5.http.protocol.HttpContext context)` Upgrades transport security of the given endpoint by using the TLS security protocol.
`void` `upgrade(AsyncConnectionEndpoint endpoint, Object attachment, org.apache.hc.core5.http.protocol.HttpContext context, org.apache.hc.core5.concurrent.FutureCallback<AsyncConnectionEndpoint> callback)` Upgrades transport security of the given endpoint by using the TLS security protocol.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### DEFAULT_MAX_TOTAL_CONNECTIONS

    public static final int DEFAULT_MAX_TOTAL_CONNECTIONS

See Also:
  Constant Field Values

#### DEFAULT_MAX_CONNECTIONS_PER_ROUTE

    public static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE

See Also:
  Constant Field Values

### Constructor Detail

#### PoolingAsyncClientConnectionManager

    public PoolingAsyncClientConnectionManager()

#### PoolingAsyncClientConnectionManager

    public PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup)

#### PoolingAsyncClientConnectionManager

    public PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup,
                                               org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy,
                                               org.apache.hc.core5.util.TimeValue timeToLive)

#### PoolingAsyncClientConnectionManager

    public PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup,
                                               org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy,
                                               org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy,
                                               org.apache.hc.core5.util.TimeValue timeToLive)

#### PoolingAsyncClientConnectionManager

    public PoolingAsyncClientConnectionManager(org.apache.hc.core5.http.config.Lookup<org.apache.hc.core5.http.nio.ssl.TlsStrategy> tlsStrategyLookup,
                                               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)

#### PoolingAsyncClientConnectionManager

    @Internal
    public PoolingAsyncClientConnectionManager(AsyncClientConnectionOperator connectionOperator,
                                                         org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy,
                                                         org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy,
                                                         org.apache.hc.core5.util.TimeValue timeToLive,
                                                         boolean messageMultiplexing)

#### PoolingAsyncClientConnectionManager

    @Internal
    protected PoolingAsyncClientConnectionManager(org.apache.hc.core5.pool.ManagedConnPool<HttpRoute,ManagedAsyncClientConnection> pool,
                                                            AsyncClientConnectionOperator connectionOperator)

### Method Detail

#### close

    public void close()

Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`

#### close

    public void close(org.apache.hc.core5.io.CloseMode closeMode)

Specified by:
  `close` in interface `org.apache.hc.core5.io.ModalCloseable`

#### lease

    public Future<AsyncConnectionEndpoint> lease(String id,
                                                 HttpRoute route,
                                                 Object state,
                                                 org.apache.hc.core5.util.Timeout requestTimeout,
                                                 org.apache.hc.core5.concurrent.FutureCallback<AsyncConnectionEndpoint> callback)

Description copied from interface: `AsyncClientConnectionManager`
Returns a `Future` object which can be used to obtain an `AsyncConnectionEndpoint` or to cancel the request by calling `Future.cancel(boolean)`.

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 calling `AsyncClientConnectionManager.connect(AsyncConnectionEndpoint, ConnectionInitiator, Timeout, Object, HttpContext, FutureCallback)` in order to connect directly to the target or to the first proxy hop, and optionally calling `AsyncClientConnectionManager.upgrade(AsyncConnectionEndpoint, Object, HttpContext)` method to upgrade the underlying transport to Transport Layer Security after having executed a `CONNECT` method to all intermediate proxy hops.

Specified by:
  `lease` in interface `AsyncClientConnectionManager`
Parameters:
  `id` - unique operation ID or `null`.
  `route` - HTTP route of the requested connection.
  `state` - expected state of the connection or `null` if the connection is not expected to carry any state.
  `requestTimeout` - lease request timeout.
  `callback` - result callback.

#### release

    public void release(AsyncConnectionEndpoint endpoint,
                        Object state,
                        org.apache.hc.core5.util.TimeValue keepAlive)

Description copied from interface: `AsyncClientConnectionManager`
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 using `validDuration` and `timeUnit` parameters.

Specified by:
  `release` in interface `AsyncClientConnectionManager`
Parameters:
  `endpoint` - the managed endpoint.
  `state` - the new connection state of `null` if state-less.
  `keepAlive` - the duration of time this connection is valid for reuse.

#### connect

    public Future<AsyncConnectionEndpoint> connect(AsyncConnectionEndpoint endpoint,
                                                   org.apache.hc.core5.reactor.ConnectionInitiator connectionInitiator,
                                                   org.apache.hc.core5.util.Timeout timeout,
                                                   Object attachment,
                                                   org.apache.hc.core5.http.protocol.HttpContext context,
                                                   org.apache.hc.core5.concurrent.FutureCallback<AsyncConnectionEndpoint> callback)

Description copied from interface: `AsyncClientConnectionManager`
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 interface `AsyncClientConnectionManager`
Parameters:
  `endpoint` - the managed endpoint.
  `timeout` - connect timeout.
  `attachment` - connect request attachment.
  `context` - the actual HTTP context.
  `callback` - result callback.

#### upgrade

    public void upgrade(AsyncConnectionEndpoint endpoint,
                        Object attachment,
                        org.apache.hc.core5.http.protocol.HttpContext context,
                        org.apache.hc.core5.concurrent.FutureCallback<AsyncConnectionEndpoint> callback)

Description copied from interface: `AsyncClientConnectionManager`
Upgrades transport security of the given endpoint by using the TLS security protocol.

Specified by:
  `upgrade` in interface `AsyncClientConnectionManager`
Parameters:
  `endpoint` - the managed endpoint.
  `attachment` - the attachment the upgrade attachment object.
  `context` - the actual HTTP context.
  `callback` - result callback.

#### upgrade

    public void upgrade(AsyncConnectionEndpoint endpoint,
                        Object attachment,
                        org.apache.hc.core5.http.protocol.HttpContext context)

Description copied from interface: `AsyncClientConnectionManager`
Upgrades transport security of the given endpoint by using the TLS security protocol.

Specified by:
  `upgrade` in interface `AsyncClientConnectionManager`
Parameters:
  `endpoint` - the managed endpoint.
  `attachment` - the attachment the upgrade attachment object.
  `context` - the actual HTTP context.

#### getRoutes

    public Set<HttpRoute> getRoutes()

Specified by:
  `getRoutes` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### setMaxTotal

    public void setMaxTotal(int max)

Specified by:
  `setMaxTotal` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### getMaxTotal

    public int getMaxTotal()

Specified by:
  `getMaxTotal` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### setDefaultMaxPerRoute

    public void setDefaultMaxPerRoute(int max)

Specified by:
  `setDefaultMaxPerRoute` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### getDefaultMaxPerRoute

    public int getDefaultMaxPerRoute()

Specified by:
  `getDefaultMaxPerRoute` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### setMaxPerRoute

    public void setMaxPerRoute(HttpRoute route,
                               int max)

Specified by:
  `setMaxPerRoute` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### getMaxPerRoute

    public int getMaxPerRoute(HttpRoute route)

Specified by:
  `getMaxPerRoute` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### closeIdle

    public void closeIdle(org.apache.hc.core5.util.TimeValue idletime)

Specified by:
  `closeIdle` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### closeExpired

    public void closeExpired()

Specified by:
  `closeExpired` in interface `org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>`

#### getTotalStats

    public org.apache.hc.core5.pool.PoolStats getTotalStats()

Specified by:
  `getTotalStats` in interface `org.apache.hc.core5.pool.ConnPoolStats<HttpRoute>`

#### getStats

    public org.apache.hc.core5.pool.PoolStats getStats(HttpRoute route)

Specified by:
  `getStats` in interface `org.apache.hc.core5.pool.ConnPoolStats<HttpRoute>`

#### setDefaultConnectionConfig

    public void setDefaultConnectionConfig(ConnectionConfig config)

Sets the same `ConnectionConfig` for all routes

Since:
  5.2

#### setConnectionConfigResolver

    public void setConnectionConfigResolver(org.apache.hc.core5.function.Resolver<HttpRoute,ConnectionConfig> connectionConfigResolver)

Sets `Resolver` of `ConnectionConfig` on a per route basis.

Since:
  5.2

#### setDefaultTlsConfig

    public void setDefaultTlsConfig(TlsConfig config)

Sets the same `ConnectionConfig` for all hosts

Since:
  5.2

#### setTlsConfigResolver

    public void setTlsConfigResolver(org.apache.hc.core5.function.Resolver<org.apache.hc.core5.http.HttpHost,TlsConfig> tlsConfigResolver)

Sets `Resolver` of `TlsConfig` on a per host basis.

Since:
  5.2

#### getValidateAfterInactivity

    @Deprecated
    public org.apache.hc.core5.util.TimeValue getValidateAfterInactivity()

Deprecated. Use custom `setConnectionConfigResolver(Resolver)`

#### setValidateAfterInactivity

    @Deprecated
    public void setValidateAfterInactivity(org.apache.hc.core5.util.TimeValue validateAfterInactivity)

Deprecated. Use `setConnectionConfigResolver(Resolver)`.
Defines period of inactivity after which persistent connections must be re-validated prior to being `lease(String, HttpRoute, Object, Timeout, FutureCallback)` 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.

#### isClosed

    public boolean isClosed()

Method that can be called to determine whether the connection manager has been shut down and is closed or not.

Returns:
  `true` if the connection manager has been shut down and is closed, otherwise return `false`.
Since:
  5.4