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 HttpConnections 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 Details

  • Constructor Details

    • 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 protected 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 Details

    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • close

      public void close(org.apache.hc.core5.io.CloseMode closeMode)
      Specified by:
      close in interface org.apache.hc.core5.io.ModalCloseable
    • cast

    • resolveConnectionConfig

      private ConnectionConfig resolveConnectionConfig(HttpRoute route)
    • resolveTlsConfig

      private TlsConfig resolveTlsConfig(org.apache.hc.core5.http.HttpHost host, Object attachment)
    • 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
    • closeIfExpired

      void closeIfExpired(org.apache.hc.core5.pool.PoolEntry<HttpRoute,ManagedAsyncClientConnection> entry)
    • getValidateAfterInactivity

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

      @Deprecated public void setValidateAfterInactivity(org.apache.hc.core5.util.TimeValue validateAfterInactivity)
      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

      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.