Class PoolingHttpClientConnectionManager

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, HttpClientConnectionManager, 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 PoolingHttpClientConnectionManager
    extends java.lang.Object
    implements HttpClientConnectionManager, org.apache.hc.core5.pool.ConnPoolControl<HttpRoute>
    ClientConnectionPoolManager maintains a pool of ManagedHttpClientConnections 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 serviced by leasing a connection from the pool rather than creating a new connection.

    ClientConnectionPoolManager maintains a maximum limit of connection on a per route basis and in total. Connection limits, however, 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:
    4.3
    • 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
      • socketConfigResolver

        private volatile org.apache.hc.core5.function.Resolver<HttpRoute,​org.apache.hc.core5.http.io.SocketConfig> socketConfigResolver
      • 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

      • PoolingHttpClientConnectionManager

        public PoolingHttpClientConnectionManager()
      • PoolingHttpClientConnectionManager

        public PoolingHttpClientConnectionManager​(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry)
      • PoolingHttpClientConnectionManager

        public PoolingHttpClientConnectionManager​(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                                  org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
      • PoolingHttpClientConnectionManager

        public PoolingHttpClientConnectionManager​(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                                  org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy,
                                                  org.apache.hc.core5.util.TimeValue timeToLive,
                                                  org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
      • PoolingHttpClientConnectionManager

        public PoolingHttpClientConnectionManager​(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                                  org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy,
                                                  org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy,
                                                  org.apache.hc.core5.util.TimeValue timeToLive)
      • PoolingHttpClientConnectionManager

        public PoolingHttpClientConnectionManager​(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                                  org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy,
                                                  org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy,
                                                  org.apache.hc.core5.util.TimeValue timeToLive,
                                                  org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
      • PoolingHttpClientConnectionManager

        public PoolingHttpClientConnectionManager​(org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                                  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,
                                                  org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
      • PoolingHttpClientConnectionManager

        @Internal
        protected PoolingHttpClientConnectionManager​(HttpClientConnectionOperator httpClientConnectionOperator,
                                                     org.apache.hc.core5.pool.PoolConcurrencyPolicy poolConcurrencyPolicy,
                                                     org.apache.hc.core5.pool.PoolReusePolicy poolReusePolicy,
                                                     org.apache.hc.core5.util.TimeValue timeToLive,
                                                     org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
    • 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
      • resolveSocketConfig

        private org.apache.hc.core5.http.io.SocketConfig resolveSocketConfig​(HttpRoute route)
      • resolveTlsConfig

        private TlsConfig resolveTlsConfig​(org.apache.hc.core5.http.HttpHost host)
      • resolveValidateAfterInactivity

        private org.apache.hc.core5.util.TimeValue resolveValidateAfterInactivity​(ConnectionConfig connectionConfig)
      • release

        public void release​(ConnectionEndpoint endpoint,
                            java.lang.Object state,
                            org.apache.hc.core5.util.TimeValue keepAlive)
        Description copied from interface: HttpClientConnectionManager
        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 HttpClientConnectionManager
        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 void connect​(ConnectionEndpoint endpoint,
                            org.apache.hc.core5.util.TimeValue timeout,
                            org.apache.hc.core5.http.protocol.HttpContext context)
                     throws java.io.IOException
        Description copied from interface: HttpClientConnectionManager
        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 HttpClientConnectionManager
        Parameters:
        endpoint - the managed endpoint.
        timeout - connect timeout.
        context - the actual HTTP context.
        Throws:
        java.io.IOException
      • upgrade

        public void upgrade​(ConnectionEndpoint endpoint,
                            org.apache.hc.core5.http.protocol.HttpContext context)
                     throws java.io.IOException
        Description copied from interface: HttpClientConnectionManager
        Upgrades transport security of the given endpoint by using the TLS security protocol.
        Specified by:
        upgrade in interface HttpClientConnectionManager
        Parameters:
        endpoint - the managed endpoint.
        context - the actual HTTP context.
        Throws:
        java.io.IOException
      • 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>
      • getRoutes

        public java.util.Set<HttpRoute> getRoutes()
        Specified by:
        getRoutes 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>
      • setMaxTotal

        public void setMaxTotal​(int max)
        Specified by:
        setMaxTotal 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>
      • setDefaultMaxPerRoute

        public void setDefaultMaxPerRoute​(int max)
        Specified by:
        setDefaultMaxPerRoute 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>
      • setMaxPerRoute

        public void setMaxPerRoute​(HttpRoute route,
                                   int max)
        Specified by:
        setMaxPerRoute 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>
      • setDefaultSocketConfig

        public void setDefaultSocketConfig​(org.apache.hc.core5.http.io.SocketConfig config)
        Sets the same SocketConfig for all routes
      • setSocketConfigResolver

        public void setSocketConfigResolver​(org.apache.hc.core5.function.Resolver<HttpRoute,​org.apache.hc.core5.http.io.SocketConfig> socketConfigResolver)
        Sets Resolver of SocketConfig on a per route basis.
        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
      • 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) 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.
        Since:
        4.4