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

    • 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:
    • pool

      private final org.apache.hc.core5.pool.ManagedConnPool<HttpRoute,ManagedAsyncClientConnection> pool
    • connectionOperator

      private final AsyncClientConnectionOperator connectionOperator
    • closed

      private final AtomicBoolean closed
    • validateAfterInactivity

      private volatile org.apache.hc.core5.util.TimeValue validateAfterInactivity
    • COUNT

      private static final AtomicLong COUNT
  • 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

    • 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 connectTimeout, 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.
      connectTimeout - 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)
      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>
    • getValidateAfterInactivity

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

      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.