@Test(groups = { "standalone", "default_provider" }) public void multipleMaxConnectionOpenTest() throws Throwable { AsyncHttpClientConfig cg = new AsyncHttpClientConfig.Builder().setAllowPoolingConnections(true).setConnectTimeout(5000).setMaxConnections(1).build(); try (AsyncHttpClient client = getAsyncHttpClient(cg)) { String body = "hello there"; // once Response response = client.preparePost(getTargetUrl()).setBody(body).execute().get(TIMEOUT, TimeUnit.SECONDS); assertEquals(response.getResponseBody(), body); // twice Exception exception = null; try { client.preparePost(String.format("http://127.0.0.1:%d/foo/test", port2)).setBody(body).execute().get(TIMEOUT, TimeUnit.SECONDS); fail("Should throw exception. Too many connections issued."); } catch (Exception ex) { ex.printStackTrace(); exception = ex; } assertNotNull(exception); assertNotNull(exception.getCause()); assertEquals(exception.getCause().getMessage(), "Too many connections 1"); } }
@Test(groups = { "standalone", "default_provider" }) public void negativeContentTypeTest() throws Throwable { AsyncHttpClientConfig.Builder confbuilder = new AsyncHttpClientConfig.Builder(); confbuilder = confbuilder.setConnectTimeout(100); confbuilder = confbuilder.setMaxConnections(50); confbuilder = confbuilder.setRequestTimeout(5 * 60 * 1000); // 5 minutes try (AsyncHttpClient client = getAsyncHttpClient(confbuilder.build())) { RequestBuilder requestBuilder = new RequestBuilder("POST").setUrl(getTargetUrl()).setHeader("Content-Type", "message/rfc822"); requestBuilder.setBody(new InputStreamBodyGenerator(new ByteArrayInputStream(MY_MESSAGE.getBytes()))); Future<Response> future = client.executeRequest(requestBuilder.build()); System.out.println("waiting for response"); Response response = future.get(); assertEquals(response.getStatusCode(), 200); assertEquals(response.getResponseBody(), MY_MESSAGE); } } }
@Override @Test public void testMaxTotalConnectionsException() { try(AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setAllowPoolingConnections(true).setMaxConnections(1).build())) { String url = getTargetUrl(); ListenableFuture<?> lockRequest = null; try { lockRequest = client.prepareGet(url).addHeader("LockThread", "true").execute(); } catch (Exception e) { fail("Unexpected exception thrown.", e); } try { client.prepareConnect(url).execute().get(); } catch (ExecutionException ee) { final Throwable cause = ee.getCause(); assertNotNull(cause); assertEquals("Max connections exceeded", cause.getMessage()); } catch (Exception e) { fail("Unexpected exception thrown.", e); } lockRequest.cancel(true); } }
/** * Creates new HttpClient from the configuration set * * @return new HttpClient instance */ public HttpClient build() { final AsyncHttpClientConfig.Builder configBuilder = new AsyncHttpClientConfig.Builder(). setConnectTimeout(connectionTimeout). setMaxRequestRetry(retries). setRequestTimeout(requestTimeout). setCompressionEnforced(compressionEnforced). setDisableUrlEncodingForBoundedRequests(disableUrlEncoding). setMaxConnectionsPerHost(maxConnectionsPerHost). setMaxConnections(maxTotalConnections). setAsyncHttpClientProviderConfig(NettyConfigHolder.INSTANCE). setFollowRedirect(followRedirect). setAcceptAnyCertificate(acceptAnySslCertificate); if (readTimeout != null) { configBuilder.setReadTimeout(readTimeout); } return new HttpClient(new AsyncHttpClient(configBuilder.build()), responseMaxSize, marshallingStrategy); } }
@Override @Test public void multipleMaxConnectionOpenTest() throws Throwable { AsyncHttpClientConfig cg = new AsyncHttpClientConfig.Builder().setAllowPoolingConnections(true).setConnectTimeout(5000).setMaxConnections(1).build(); try (AsyncHttpClient c = getAsyncHttpClient(cg)) { String body = "hello there"; // once Response response = c.preparePost(getTargetUrl()).setBody(body).execute().get(TIMEOUT, TimeUnit.SECONDS); assertEquals(response.getResponseBody(), body); // twice Exception exception = null; try { c.preparePost(String.format("http://127.0.0.1:%d/foo/test", port2)).setBody(body).execute().get(TIMEOUT, TimeUnit.SECONDS); fail("Should throw exception. Too many connections issued."); } catch (Exception ex) { ex.printStackTrace(); exception = ex; } assertNotNull(exception); } } }
@Test(groups = { "standalone", "default_provider" }) public void multipleMaxConnectionOpenTestWithQuery() throws Throwable { AsyncHttpClientConfig cg = new AsyncHttpClientConfig.Builder().setAllowPoolingConnections(true).setConnectTimeout(5000).setMaxConnections(1).build(); try (AsyncHttpClient client = getAsyncHttpClient(cg)) { String body = "hello there"; // once Response response = client.preparePost(getTargetUrl() + "?foo=bar").setBody(body).execute().get(TIMEOUT, TimeUnit.SECONDS); assertEquals(response.getResponseBody(), "foo_" + body); // twice Exception exception = null; try { response = client.preparePost(getTargetUrl()).setBody(body).execute().get(TIMEOUT, TimeUnit.SECONDS); } catch (Exception ex) { ex.printStackTrace(); } assertNull(exception); assertNotNull(response); assertEquals(response.getStatusCode(), 200); } }
DatastoreImpl(final DatastoreConfig config) { this.config = config; final AsyncHttpClientConfig httpConfig = new AsyncHttpClientConfig.Builder() .setConnectTimeout(config.getConnectTimeout()) .setRequestTimeout(config.getRequestTimeout()) .setMaxConnections(config.getMaxConnections()) .setMaxRequestRetry(config.getRequestRetry()) .setCompressionEnforced(true) .build(); client = new AsyncHttpClient(httpConfig); prefixUri = String.format("%s/%s/projects/%s:", config.getHost(), config.getVersion(), config.getProject()); executor = Executors.newSingleThreadScheduledExecutor(); if (config.getCredential() != null) { // block while retrieving an access token for the first time refreshAccessToken(); // wake up every 10 seconds to check if access token has expired executor.scheduleAtFixedRate(this::refreshAccessToken, 10, 10, TimeUnit.SECONDS); } }
@Test(groups = { "standalone", "default_provider" }) public void testMaxTotalConnections() { try (AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setAllowPoolingConnections(true).setMaxConnections(1).build())) { String url = getTargetUrl(); int i; Exception exception = null; for (i = 0; i < 3; i++) { try { log.info("{} requesting url [{}]...", i, url); Response response = client.prepareGet(url).execute().get(); log.info("{} response [{}].", i, response); } catch (Exception ex) { exception = ex; } } assertNull(exception); } }
@Test(groups = { "standalone", "default_provider" }) public void nonPoolableConnectionReleaseSemaphoresTest() throws Throwable { AsyncHttpClientConfig config = new AsyncHttpClientConfig.Builder() .setMaxConnections(6) .setMaxConnectionsPerHost(3) .build(); Request request = new RequestBuilder().setUrl(getTargetUrl()).setHeader("Connection", "close").build(); try (AsyncHttpClient client = getAsyncHttpClient(config)) { client.executeRequest(request).get(); Thread.sleep(1000); client.executeRequest(request).get(); Thread.sleep(1000); client.executeRequest(request).get(); Thread.sleep(1000); client.executeRequest(request).get(); } } }
@Test(invocationCount = 4, groups = { "online", "default_provider" }) public void multipleSslRequestsWithDelayAndKeepAlive() throws Throwable { AsyncHttpClientConfig.Builder configBuilder = new AsyncHttpClientConfig.Builder().setFollowRedirect(true).setSSLContext(getSSLContext()).setAllowPoolingConnections(true).setConnectTimeout(10000) .setPooledConnectionIdleTimeout(60000).setRequestTimeout(10000).setMaxConnectionsPerHost(-1).setMaxConnections(-1); try (AsyncHttpClient client = getAsyncHttpClient(configBuilder.build())) { final BoundRequestBuilder builder = client.prepareGet(VERISIGN_HTTPS_URL); final Response response1 = builder.execute().get(); Thread.sleep(4000); final Response response2 = builder.execute().get(); if (response2 != null) { System.out.println("Success (2nd response was not null)."); } else { System.out.println("Failed (2nd response was null)."); } Assert.assertNotNull(response1); Assert.assertNotNull(response2); } }
public void setMaximumConnectionsTotal(int defaultMaxTotalConnections) { builder.setMaxConnections(defaultMaxTotalConnections); }
private void configureConnections(AsyncHttpClientConfig.Builder builder) throws InitialisationException { if (maxConnections > 0) { builder.addRequestFilter(new CustomTimeoutThrottleRequestFilter(maxConnections)); } builder.setMaxConnections(maxConnections); builder.setMaxConnectionsPerHost(maxConnections); builder.setAllowPoolingConnections(usePersistentConnections); builder.setAllowPoolingSslConnections(usePersistentConnections); builder.setConnectionTTL(MAX_CONNECTION_LIFETIME); builder.setPooledConnectionIdleTimeout(connectionIdleTimeout); builder.setIOThreadMultiplier(1); }
public Builder setMaximumConnectionsTotal(int defaultMaxTotalConnections) { configBuilder.setMaxConnections(defaultMaxTotalConnections); return this; }
public Builder setMaximumConnectionsTotal(int defaultMaxTotalConnections) { configBuilder.setMaxConnections(defaultMaxTotalConnections); return this; }
protected AsyncHttpClientConfig.Builder httpClientBuilder() { return new AsyncHttpClientConfig.Builder()// .setAllowPoolingConnections(true)// .setMaxConnectionsPerHost(1)// .setMaxConnections(1)// .setConnectTimeout(1000)// .setRequestTimeout(1000).setFollowRedirect(true); }
public Builder setMaximumConnectionsTotal(int defaultMaxTotalConnections) { configBuilder.setMaxConnections(defaultMaxTotalConnections); return this; }
private void configureConnections(AsyncHttpClientConfig.Builder builder) { if (maxConnections > 0) { builder.addRequestFilter(new CustomTimeoutThrottleRequestFilter(maxConnections)); } builder.setMaxConnections(maxConnections); builder.setMaxConnectionsPerHost(maxConnections); builder.setAllowPoolingConnections(usePersistentConnections); builder.setAllowPoolingSslConnections(usePersistentConnections); builder.setConnectionTTL(MAX_CONNECTION_LIFETIME); builder.setPooledConnectionIdleTimeout(connectionIdleTimeout); builder.setIOThreadMultiplier(1); }
/** * Set the maximum number of connections client will open. Default is unlimited (-1). * * @param maxConnections the maximum number of connections. * @return this config builder. */ public Builder maxConnections(final int maxConnections) { clientConfig.setMaxConnections(maxConnections); return this; }
AsyncHttpClient buildDefaultClient() { builder.setMaxRequestRetry(maxRequestRetry)//尝试重试次数 .setAllowPoolingConnections(allowPollingConnections)//开启连接池模式 .setMaxConnections(maxConnections)//最大连接数 .setConnectTimeout(connectTimeout)//连接超时时间 .setPooledConnectionIdleTimeout(readTimeout)//设置连接池超时时间 .setReadTimeout(readTimeout)//读取请求超时时间 .setFollowRedirect(followRedirect)//开启重定向追踪 .setMaxRedirects(maxRedirects)//重定向次数限制 .setUserAgent(userAgent)//设置UserAgent .setMaxConnectionsPerHost(maxConnectionsPerHost)//设置初始连接池大小 .setIOThreadMultiplier(ioThreadMultiplier)//用于IO的线程数 .setCompressionEnforced(compressionEnforced)//压缩执行 ; return new AsyncHttpClient(builder.build()); }
public Builder setMaximumConnectionsTotal(int defaultMaxTotalConnections) { configBuilder.setMaxConnections(defaultMaxTotalConnections); return this; }