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
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `DEFAULT_MAX_CONNECTIONS_PER_ROUTE`
    `static int` | `DEFAULT_MAX_TOTAL_CONNECTIONS`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `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)`
    `` | `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
    Modifier and Type | Method and Description
    --- | ---
    `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)

    - #### 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

Copyright © 1999–2021 The Apache Software Foundation. All rights reserved.