Class PoolingAsyncClientConnectionManager

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.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 java.lang.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 Detail

      • LOG

        private static final org.slf4j.Logger LOG
      • 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
      • closed

        private final java.util.concurrent.atomic.AtomicBoolean closed
      • 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
    • 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
        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)
    • Method Detail

      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
      • close

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

        private TlsConfig resolveTlsConfig​(org.apache.hc.core5.http.HttpHost host,
                                           java.lang.Object attachment)
      • release

        public void release​(AsyncConnectionEndpoint endpoint,
                            java.lang.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 java.util.concurrent.Future<AsyncConnectionEndpoint> connect​(AsyncConnectionEndpoint endpoint,
                                                                            org.apache.hc.core5.reactor.ConnectionInitiator connectionInitiator,
                                                                            org.apache.hc.core5.util.Timeout timeout,
                                                                            java.lang.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,
                            java.lang.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,
                            java.lang.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 java.util.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>
      • 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
      • 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.