private CloseableHttpAsyncClient createHttpAsyncClient(YunpianConf conf) throws IOReactorException { IOReactorConfig ioReactorConfig = IOReactorConfig.custom().setIoThreadCount(Runtime.getRuntime().availableProcessors()) .setConnectTimeout(conf.getConfInt(YunpianConf.HTTP_CONN_TIMEOUT, "10000")) .setSoTimeout(conf.getConfInt(YunpianConf.HTTP_SO_TIMEOUT, "30000")).build(); ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig); PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager(ioReactor); ConnectionConfig connectionConfig = ConnectionConfig.custom().setMalformedInputAction(CodingErrorAction.IGNORE) .setUnmappableInputAction(CodingErrorAction.IGNORE) .setCharset(Charset.forName(conf.getConf(YunpianConf.HTTP_CHARSET, YunpianConf.HTTP_CHARSET_DEFAULT))).build(); connManager.setDefaultConnectionConfig(connectionConfig); connManager.setMaxTotal(conf.getConfInt(YunpianConf.HTTP_CONN_MAXTOTAL, "100")); connManager.setDefaultMaxPerRoute(conf.getConfInt(YunpianConf.HTTP_CONN_MAXPERROUTE, "10")); CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom().setConnectionManager(connManager).build(); httpclient.start(); return httpclient; }
public FiberApacheHttpClientRequestExecutor(final Validator<CloseableHttpResponse> resValidator, final int maxConnections, final int timeout, final int parallelism) throws IOReactorException { final DefaultConnectingIOReactor ioreactor = new DefaultConnectingIOReactor(IOReactorConfig.custom(). setConnectTimeout(timeout). setIoThreadCount(parallelism). setSoTimeout(timeout). build()); final PoolingNHttpClientConnectionManager mngr = new PoolingNHttpClientConnectionManager(ioreactor); mngr.setDefaultMaxPerRoute(maxConnections); mngr.setMaxTotal(maxConnections); final CloseableHttpAsyncClient ahc = HttpAsyncClientBuilder.create(). setConnectionManager(mngr). setDefaultRequestConfig(RequestConfig.custom().setLocalAddress(null).build()).build(); client = new FiberHttpClient(ahc); validator = resValidator; }
public static HttpClient createHttpClient(HiTSDBConfig config) throws HttpClientInitException { Objects.requireNonNull(config); // 创建 ConnectingIOReactor ConnectingIOReactor ioReactor = initIOReactorConfig(config); // 创建链接管理器 final PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor); // 创建令牌管理器 semaphoreManager = createSemaphoreManager(config); // 创建HttpAsyncClient CloseableHttpAsyncClient httpAsyncClient = createPoolingHttpClient(config,cm,semaphoreManager); // 组合生产HttpClientImpl HttpClient httpClientImpl = new HttpClient(config,httpAsyncClient,semaphoreManager); return httpClientImpl; }
private static void initFixedCycleCloseConnection(final PoolingNHttpClientConnectionManager cm) { // 定时关闭所有空闲链接 Executors.newSingleThreadScheduledExecutor( new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r, "Fixed-Cycle-Close-Connection" ); t.setDaemon(true); return t; } } ).scheduleAtFixedRate(new Runnable() { @Override public void run() { try { LOGGER.info("Close idle connections, fixed cycle operation"); cm.closeIdleConnections(3, TimeUnit.MINUTES); } catch(Exception ex) { LOGGER.error("",ex); } } }, 30, 30, TimeUnit.SECONDS); }
RestClient(String baseUrl, ObjectMapper objectMapper, Map<String, Object> defaultHeaders, Function<String, String> urlTransformer, PoolingNHttpClientConnectionManager asyncConnectionManager, PoolingHttpClientConnectionManager syncConnectionManager, CloseableHttpAsyncClient asyncClient, CloseableHttpClient syncClient) { this.objectMapper = objectMapper; this.baseUrl = baseUrl; this.urlTransformer = urlTransformer; this.asyncConnectionManager = asyncConnectionManager; this.syncConnectionManager = syncConnectionManager; this.asyncClient = asyncClient; this.syncClient = syncClient; this.defaultHeaders.putAll(defaultHeaders); this.id = UUID.randomUUID().toString().substring(0, 8); }
private DashboardSetupStatus initDashboard(final String hostAddress, final int port) { final String dashboardURL = String.format("http://%s:%d/", hostAddress, port); try { // Create a pool of http client connection, which allow up to Integer.MAX_VALUE connections. final PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager(new DefaultConnectingIOReactor()); connectionManager.setMaxTotal(Integer.MAX_VALUE); final CloseableHttpAsyncClient reusableHttpClient = HttpAsyncClients.custom().setConnectionManager(connectionManager).build(); reusableHttpClient.start(); // run another thread to send metrics. runMetricsSenderThread(); return DashboardSetupStatus.getSuccessful(dashboardURL, reusableHttpClient); } catch (IOReactorException e) { LOG.log(Level.WARNING, "Dashboard: Fail on initializing connection to the dashboard server.", e); return DashboardSetupStatus.getFailed(); } }
private CloseableHttpAsyncClient getAsyncProxyHttpClient(URI proxyUri) { LOG.info("Creating async proxy http client"); PoolingNHttpClientConnectionManager cm = getAsyncConnectionManager(); HttpHost proxy = new HttpHost(proxyUri.getHost(), proxyUri.getPort()); HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom(); if (cm != null) { clientBuilder = clientBuilder.setConnectionManager(cm); } if (proxy != null) { clientBuilder = clientBuilder.setProxy(proxy); } clientBuilder = setRedirects(clientBuilder); return clientBuilder.build(); }
/** * Used internally to initialize the internal HTTP client used by all * instances of a client. * <p> * This method can be overriden to provide a client with different options. * The client built gets an extra interceptor to add the credentials headers. * * @return HTTP default async client builder */ protected static HttpAsyncClientBuilder defaultClientBuilder() { try { DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(); connMgr = new PoolingNHttpClientConnectionManager(ioReactor); connMgr.setMaxTotal(maxConnections); connMgr.setDefaultMaxPerRoute(maxConnections); } catch (IOReactorException e) { } return HttpAsyncClients .custom() .addInterceptorLast(new GzipInterceptors.GzipRequestInterceptor()) .setConnectionManager(connMgr) .setDefaultRequestConfig( RequestConfig.custom() .setSocketTimeout(3600 * 1000) // 1 hour .build()) .setKeepAliveStrategy(keepAliveStrategy); }
@Bean public CloseableHttpAsyncClient asyncHttpClient() { try { PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager( new DefaultConnectingIOReactor(IOReactorConfig.DEFAULT)); connectionManager.setMaxTotal(DEFAULT_MAX_TOTAL_CONNECTIONS); connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_CONNECTIONS_PER_ROUTE); RequestConfig config = RequestConfig.custom() .setConnectTimeout(DEFAULT_READ_TIMEOUT_MILLISECONDS) .build(); return HttpAsyncClientBuilder.create() .setConnectionManager(connectionManager) .setDefaultRequestConfig(config) .build(); } catch (Exception e) { throw Throwables.propagate(e); } }
public SleepServerApiClient() throws Exception { connectionManager = new PoolingNHttpClientConnectionManager( new DefaultConnectingIOReactor(IOReactorConfig.DEFAULT)); connectionManager.setMaxTotal(20000); connectionManager.setDefaultMaxPerRoute(20000); RequestConfig config = RequestConfig.custom().setConnectTimeout(120000) .build(); CloseableHttpAsyncClient httpClient = HttpAsyncClientBuilder.create() .setConnectionManager(connectionManager) .setDefaultRequestConfig(config).build(); HttpComponentsAsyncClientHttpRequestFactory requestFactory = new HttpComponentsAsyncClientHttpRequestFactory( httpClient); client = new AsyncRestTemplate(requestFactory); }
private NHttpClientConnectionManager getNHttpConnManager(Config config) throws IOException { NHttpClientConnectionManager httpConnManager; String connMgrStr = config.getString(HTTP_CONN_MANAGER); switch (ApacheHttpClient.ConnManager.valueOf(connMgrStr.toUpperCase())) { case POOLING: ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(); PoolingNHttpClientConnectionManager poolingConnMgr = new PoolingNHttpClientConnectionManager(ioReactor); poolingConnMgr.setMaxTotal(config.getInt(POOLING_CONN_MANAGER_MAX_TOTAL_CONN)); poolingConnMgr.setDefaultMaxPerRoute(config.getInt(POOLING_CONN_MANAGER_MAX_PER_CONN)); httpConnManager = poolingConnMgr; break; default: throw new IllegalArgumentException(connMgrStr + " is not supported"); } LOG.info("Using " + httpConnManager.getClass().getSimpleName()); return httpConnManager; }
@Before public void before() throws Exception { tsdb = PowerMockito.mock(TSDB.class); config = new Config(false); connection_manager = mock(PoolingNHttpClientConnectionManager.class); client_builder = mock(HttpAsyncClientBuilder.class); client = mock(CloseableHttpAsyncClient.class); ts_meta_schema = mock(TSMetaSchema.class); uid_meta_schema = mock(UIDMetaSchema.class); annotation_schema = mock(AnnotationSchema.class); config.overrideConfig("tsd.search.elasticsearch.host", "localhost:9200"); when(tsdb.getConfig()).thenReturn(config); PowerMockito.mockStatic(HttpAsyncClients.class); when(HttpAsyncClients.custom()).thenReturn(client_builder); PowerMockito.whenNew(PoolingNHttpClientConnectionManager.class) .withAnyArguments().thenReturn(connection_manager); when(client_builder.build()).thenReturn(client); }
public AsyncServiceClient(ClientConfiguration config) { super(config); try { IOReactorConfig ioReactorConfig = IOReactorConfig.custom() .setIoThreadCount(config.getIoThreadCount()).build(); ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor( ioReactorConfig); PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager( ioReactor); cm.setMaxTotal(config.getMaxConnections()); cm.setDefaultMaxPerRoute(config.getMaxConnections()); httpClient = new HttpFactory().createHttpAsyncClient(config, cm); /* * socketTimeout的值限制了closeIdleConnections执行的周期。 * 如果周期相对socketTimeout的值过长,有可能一个请求分配到一个即将socketTimeout的连接, * 在请求发送之前即抛出SocketTimeoutException。 * 现在让closeIdleConnections的执行周期为socketTimeout / 2.5。 */ long closePeriod = 5000; if (config.getSocketTimeoutInMillisecond() > 0) { closePeriod = (long) (config.getSocketTimeoutInMillisecond() / 2.5); } closePeriod = closePeriod < 5000 ? closePeriod : 5000; connEvictor = new IdleConnectionEvictor(cm, closePeriod); httpClient.start(); connEvictor.start(); } catch (IOReactorException ex) { throw new ClientException(String.format("IOReactorError: %s", ex.getMessage()), ex); } }
public CloseableHttpAsyncClient createHttpAsyncClient( ClientConfiguration config, PoolingNHttpClientConnectionManager cm) { HttpAsyncClientBuilder httpClientBuilder = HttpAsyncClients.custom(); httpClientBuilder.setConnectionManager(cm); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(config.getConnectionTimeoutInMillisecond()) .setSocketTimeout(config.getSocketTimeoutInMillisecond()).build(); httpClientBuilder.setDefaultRequestConfig(requestConfig); httpClientBuilder.setUserAgent(config.getUserAgent()); httpClientBuilder.disableCookieManagement(); String proxyHost = config.getProxyHost(); int proxyPort = config.getProxyPort(); if (proxyHost != null) { if (proxyPort <= 0) { throw new ClientException("The proxy port is invalid. Please check your configuration."); } HttpHost proxy = new HttpHost(proxyHost, proxyPort); httpClientBuilder.setProxy(proxy); String proxyUsername = config.getProxyUsername(); String proxyPassword = config.getProxyPassword(); if (proxyUsername != null && proxyPassword != null) { String proxyDomain = config.getProxyDomain(); String proxyWorkstation = config.getProxyWorkstation(); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(proxyHost, proxyPort), new NTCredentials( proxyUsername, proxyPassword, proxyWorkstation, proxyDomain)); httpClientBuilder.setDefaultCredentialsProvider(credsProvider); } } return httpClientBuilder.build(); }
@Bean public CloseableHttpAsyncClient asyncHttpClient(PoolingNHttpClientConnectionManager poolingNHttpClientConnectionManager) { RequestConfig config = RequestConfig.custom() .setConnectTimeout(requestTimeout) .setSocketTimeout(requestTimeout) .setConnectionRequestTimeout(requestTimeout) .build(); return HttpAsyncClientBuilder .create().setConnectionManager(poolingNHttpClientConnectionManager) .setDefaultRequestConfig(config).build(); }
@Bean PoolingNHttpClientConnectionManager poolingNHttpClientConnectionManager() throws IOReactorException { PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager( new DefaultConnectingIOReactor(IOReactorConfig.DEFAULT)); connectionManager.setMaxTotal(maxTotalConnections); connectionManager.setDefaultMaxPerRoute(maxConnectionsPerRoute); return connectionManager; }
public RmendRequestAdapter(String _targetHost, String _endpointTemplate) throws IOReactorException { ioReactor = new DefaultConnectingIOReactor(); cm = new PoolingNHttpClientConnectionManager(ioReactor); cm.setMaxTotal(20); httpclient = HttpAsyncClients.createPipelining(); this.targetHost = _targetHost; this.endpointTemplate = _endpointTemplate; }
@Bean public CloseableHttpAsyncClient asyncHttpClient() throws Exception { PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager(new DefaultConnectingIOReactor( IOReactorConfig.DEFAULT)); connectionManager.setMaxTotal(DEFAULT_MAX_TOTAL_CONNECTIONS); connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_CONNECTIONS_PER_ROUTE); connectionManager.setMaxPerRoute(new HttpRoute(new HttpHost("localhost")), 20); RequestConfig config = RequestConfig.custom().setConnectTimeout(DEFAULT_READ_TIMEOUT_MILLISECONDS).build(); CloseableHttpAsyncClient httpclient = HttpAsyncClientBuilder.create().setConnectionManager(connectionManager).setDefaultRequestConfig(config) .build(); return httpclient; }
private HttpAsyncClientBuilder initialize() { try { final PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager( new DefaultConnectingIOReactor( IOReactorConfig.custom() .setConnectTimeout( connectTimeout ) .setSoTimeout( readTimeout ) .build() ), RegistryBuilder.<SchemeIOSessionStrategy>create() .register( "http", NoopIOSessionStrategy.INSTANCE ) .register( "https", new SSLIOSessionStrategy( certificateLocation != null ? createSSLContext( certificateLocation, certificatePassword ) : SSLContexts.createDefault(), split( System.getProperty( "https.protocols" ) ), split( System.getProperty( "https.cipherSuites" ) ), new DefaultHostnameVerifier( PublicSuffixMatcherLoader.getDefault() ) ) ) .build() ); connManager.setMaxTotal( maxConnTotal ); connManager.setDefaultMaxPerRoute( maxConnPerRoute ); return ( certificateLocation != null ? HttpAsyncClients.custom() .setSSLContext( createSSLContext( certificateLocation, certificatePassword ) ) : HttpAsyncClients.custom() ) .setMaxConnPerRoute( maxConnPerRoute ) .setConnectionManager( connManager ) .setMaxConnTotal( maxConnTotal ) .setKeepAliveStrategy( DefaultConnectionKeepAliveStrategy.INSTANCE ) .setDefaultRequestConfig( RequestConfig .custom() .setRedirectsEnabled( redirectsEnabled ) .setCookieSpec( cookieSpec ) .build() ) .setDefaultCookieStore( basicCookieStore ); } catch( IOReactorException e ) { throw new UncheckedIOException( e ); } }
/** * Create connection manager for asynchronous http client. * * @return Connection manager for asynchronous http client. * @throws IOReactorException in case if a non-recoverable I/O error. */ protected NHttpClientConnectionManager createNHttpClientConnectionManager() throws IOReactorException { ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(IOReactorConfig.custom() .setSoTimeout(this.config.getSocketTimeoutInMillis()).setTcpNoDelay(true).build()); PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager(ioReactor); connectionManager.setDefaultMaxPerRoute(this.config.getMaxConnections()); connectionManager.setMaxTotal(this.config.getMaxConnections()); return connectionManager; }
public AsyncClient() throws IOException { // Create I/O reactor configuration IOReactorConfig ioReactorConfig = IOReactorConfig.custom() .setIoThreadCount(Runtime.getRuntime().availableProcessors()) .setTcpNoDelay(true) .build(); // Create a custom I/O reactor ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig); // Create a custom Connection Manager connManager = new PoolingNHttpClientConnectionManager(ioReactor); connManager.setDefaultMaxPerRoute(defaultMaxPerRoute); connManager.setMaxTotal(defaultMaxPerRoute * MAX_CONN_MULTIPLICATION); // Create global request configuration RequestConfig defaultRequestConfig = RequestConfig.custom() .setCookieSpec(CookieSpecs.DEFAULT) .setExpectContinueEnabled(true) .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST)) .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)) .build(); // Update the request level configuration updateRequestConfig(); // Create a custom Redirect Handler redirectStrategy = new RedirectHandler(requestConfig); httpAsyncClient = HttpAsyncClients.custom() .setConnectionManager(connManager) .setDefaultRequestConfig(defaultRequestConfig) .setRedirectStrategy(redirectStrategy) .build(); }
private static CloseableHttpAsyncClient createPoolingHttpClient(HiTSDBConfig config,PoolingNHttpClientConnectionManager cm,SemaphoreManager semaphoreManager) throws HttpClientInitException { int httpConnectionPool = config.getHttpConnectionPool(); int httpConnectionLiveTime = config.getHttpConnectionLiveTime(); int httpKeepaliveTime = config.getHttpKeepaliveTime(); RequestConfig requestConfig = initRequestConfig(config); if (httpConnectionPool > 0) { cm.setMaxTotal(httpConnectionPool); cm.setDefaultMaxPerRoute(httpConnectionPool); cm.closeExpiredConnections(); } HttpAsyncClientBuilder httpAsyncClientBuilder = HttpAsyncClients.custom(); // 设置连接管理器 httpAsyncClientBuilder.setConnectionManager(cm); // 设置RequestConfig if (requestConfig != null) { httpAsyncClientBuilder.setDefaultRequestConfig(requestConfig); } // 设置Keepalive if (httpKeepaliveTime > 0) { HiTSDBConnectionKeepAliveStrategy hiTSDBConnectionKeepAliveStrategy = new HiTSDBConnectionKeepAliveStrategy(httpConnectionLiveTime); httpAsyncClientBuilder.setKeepAliveStrategy(hiTSDBConnectionKeepAliveStrategy); } else if (httpKeepaliveTime == 0) { HiTSDBConnectionReuseStrategy hiTSDBConnectionReuseStrategy = new HiTSDBConnectionReuseStrategy(); httpAsyncClientBuilder.setConnectionReuseStrategy(hiTSDBConnectionReuseStrategy); } // 设置连接自动关闭 if(httpConnectionLiveTime > 0) { HiTSDBHttpAsyncCallbackExecutor httpAsyncCallbackExecutor = new HiTSDBHttpAsyncCallbackExecutor(httpConnectionLiveTime); httpAsyncClientBuilder.setEventHandler(httpAsyncCallbackExecutor); } // 启动定时调度 initFixedCycleCloseConnection(cm); CloseableHttpAsyncClient client = httpAsyncClientBuilder.build(); return client; }
protected ExecCallbackAsyncREST<HttpResponse> buildAsyncClient(RESTPool pool) throws IOException { SSLContext sslContext; try { sslContext = SSLContext.getDefault(); } catch (NoSuchAlgorithmException e) { throw new IOException(e); } Registry<SchemeIOSessionStrategy> socketRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create() .register("http", NoopIOSessionStrategy.INSTANCE) .register("https", new SSLIOSessionStrategy(sslContext, NoopHostnameVerifier.INSTANCE)) .build(); IOReactorConfig socketConfig = IOReactorConfig.custom() .setIoThreadCount(pool.getReactorThreadCount()) .setSoTimeout(new Long(pool.getSocketTimeout()).intValue()) .setTcpNoDelay(true) .setSoKeepAlive(true) .setSelectInterval(REACTOR_SELECT_INTERVAL) .build(); ConnectionConfig connectionConfig = ConnectionConfig.custom() .setCharset(StandardCharsets.UTF_8) .setMalformedInputAction(CodingErrorAction.IGNORE) .setUnmappableInputAction(CodingErrorAction.IGNORE) .build(); RequestConfig requestConfig = RequestConfig.custom() .setConnectionRequestTimeout(new Long(pool.getMaxPoolWait()).intValue()) .setConnectTimeout(new Long(pool.getConnectionTimeout()).intValue()) .setExpectContinueEnabled(pool.expectContinue()) .setRedirectsEnabled(false) .setStaleConnectionCheckEnabled(pool.getValidationOnInactivity() >= 0) .build(); NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory = new ManagedNHttpClientConnectionFactory( new org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory(), new org.apache.http.impl.nio.codecs.DefaultHttpResponseParserFactory(), HeapByteBufferAllocator.INSTANCE ); //TODO set validateAfterInactivity when supported PoolingNHttpClientConnectionManager ccm = new PoolingNHttpClientConnectionManager( new DefaultConnectingIOReactor(socketConfig), connFactory, socketRegistry, new SystemDefaultDnsResolver() ); ccm.setMaxTotal(pool.getMaxTotal()); ccm.setDefaultMaxPerRoute(pool.getMaxPerRoute()); ccm.setDefaultConnectionConfig(connectionConfig); HttpAsyncClientBuilder builder = HttpAsyncClients.custom() .setConnectionManager(ccm) .setDefaultRequestConfig(requestConfig) .setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE) .disableCookieManagement(); IdleAsyncConnectionEvictor evictor = new IdleAsyncConnectionEvictor(ccm, pool.getEvictorSleep(), TimeUnit.MILLISECONDS, pool.getMaxIdleTime(), TimeUnit.MILLISECONDS); addProxy(pool, builder); handleRedirects(pool, builder); CloseableHttpAsyncClient servClient = builder.build(); servClient.start(); HTTPCClientMonitor monitor = pool.hasConnectionMetrics() ? new HTTPCAsyncClientMonitor(pool.getName(), ccm) : null; return new HTTPCAsyncClient(servClient, evictor, monitor); }
public RestClient build() { try { // Create common default configuration RequestConfig clientConfig = RequestConfig.custom() .setRedirectsEnabled(followredirect) .setConnectTimeout(connectionTimeout) .setSocketTimeout(socketTimeout) .setConnectionRequestTimeout(socketTimeout) .setProxy(proxy) .setCookieSpec(cookieSpec) .build(); PoolingHttpClientConnectionManager syncConnectionManager = new PoolingHttpClientConnectionManager(); syncConnectionManager.setMaxTotal(maxTotal); // syncConnectionManager.setDefaultMaxPerRoute(maxPerRoute); CloseableHttpClient syncClient = HttpClientBuilder.create() .setDefaultRequestConfig(clientConfig) .setConnectionManager(syncConnectionManager) .build(); DefaultConnectingIOReactor ioreactor = new DefaultConnectingIOReactor(); PoolingNHttpClientConnectionManager asyncConnectionManager = new PoolingNHttpClientConnectionManager(ioreactor); asyncConnectionManager.setMaxTotal(maxTotal); // asyncConnectionManager.setDefaultMaxPerRoute(maxPerRoute); CloseableHttpAsyncClient asyncClient = HttpAsyncClientBuilder.create() .setDefaultRequestConfig(clientConfig) .setConnectionManager(asyncConnectionManager) .build(); RestClient restClient = new RestClient(baseUrl, objectMapper, defaultHeaders, urlTransformer, asyncConnectionManager, syncConnectionManager, asyncClient, syncClient); ClientContainer.addClient(restClient); return restClient; } catch (Exception e) { throw new RuntimeException(e); } }
public static void main(String[] args) throws Exception { ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(); PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor); cm.setMaxTotal(100); CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom().setConnectionManager(cm).build(); try { httpclient.start(); // create an array of URIs to perform GETs on String[] urisToGet = { "http://hc.apache.org/", "http://hc.apache.org/httpcomponents-core-ga/", "http://hc.apache.org/httpcomponents-client-ga/", }; IdleConnectionEvictor connEvictor = new IdleConnectionEvictor(cm); connEvictor.start(); final CountDownLatch latch = new CountDownLatch(urisToGet.length); for (final String uri : urisToGet) { final HttpGet httpget = new HttpGet(uri); httpclient.execute(httpget, new FutureCallback<HttpResponse>() { @Override public void completed(final HttpResponse response) { latch.countDown(); System.out.println(httpget.getRequestLine() + "->" + response.getStatusLine()); } @Override public void failed(final Exception ex) { latch.countDown(); System.out.println(httpget.getRequestLine() + "->" + ex); } @Override public void cancelled() { latch.countDown(); System.out.println(httpget.getRequestLine() + " cancelled"); } }); } latch.await(); // Sleep 10 sec and let the connection evictor do its job Thread.sleep(20000); // Shut down the evictor thread connEvictor.shutdown(); connEvictor.join(); } finally { httpclient.close(); } }
public static void main(String[] args) throws Exception { ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(); PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor); cm.setMaxTotal(100); CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom() .setConnectionManager(cm) .build(); try { httpclient.start(); // create an array of URIs to perform GETs on String[] urisToGet = { "http://hc.apache.org/", "http://hc.apache.org/httpcomponents-core-ga/", "http://hc.apache.org/httpcomponents-client-ga/", }; IdleConnectionEvictor connEvictor = new IdleConnectionEvictor(cm); connEvictor.start(); final CountDownLatch latch = new CountDownLatch(urisToGet.length); for (final String uri: urisToGet) { final HttpGet httpget = new HttpGet(uri); httpclient.execute(httpget, new FutureCallback<HttpResponse>() { @Override public void completed(final HttpResponse response) { latch.countDown(); System.out.println(httpget.getRequestLine() + "->" + response.getStatusLine()); } @Override public void failed(final Exception ex) { latch.countDown(); System.out.println(httpget.getRequestLine() + "->" + ex); } @Override public void cancelled() { latch.countDown(); System.out.println(httpget.getRequestLine() + " cancelled"); } }); } latch.await(); // Sleep 10 sec and let the connection evictor do its job Thread.sleep(20000); // Shut down the evictor thread connEvictor.shutdown(); connEvictor.join(); } finally { httpclient.close(); } }