@Test(timeOut = 10 * 60 * 1000, groups = "scalability") public void rc10kProblem() throws IOException, ExecutionException, TimeoutException, InterruptedException { try (AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setMaxConnectionsPerHost(C10K).setAllowPoolingConnections(true).build())) { List<Future<Integer>> resps = new ArrayList<>(C10K); int i = 0; while (i < C10K) { resps.add(client.prepareGet(String.format("http://127.0.0.1:%d/%d", ports[i % SRV_COUNT], i)).execute(new MyAsyncHandler(i++))); } i = 0; for (Future<Integer> fResp : resps) { Integer resp = fResp.get(); assertNotNull(resp); assertEquals(resp.intValue(), i++); } } }
.setMaxConnections(1).setMaxConnectionsPerHost(1).build();
.setMaxConnectionsPerHost(60) .setMaxConnections(60) .setAcceptAnyCertificate(true)
.setMaxConnectionsPerHost(1)// .setMaxConnections(1)// .setConnectTimeout(1000)//
.setAllowPoolingConnections(false).setMaxConnections(2).setMaxConnectionsPerHost(1).build();
@Test(groups = { "standalone", "default_provider" }) public void testMaxTotalConnectionsExceedingException() throws IOException { String[] urls = new String[] { "http://google.com", "http://github.com/" }; AsyncHttpClientConfig config = new AsyncHttpClientConfig.Builder().setConnectTimeout(1000) .setRequestTimeout(5000).setAllowPoolingConnections(false).setMaxConnections(1).setMaxConnectionsPerHost(1) .build(); try (AsyncHttpClient client = getAsyncHttpClient(config)) { List<ListenableFuture<Response>> futures = new ArrayList<>(); for (int i = 0; i < urls.length; i++) { futures.add(client.prepareGet(urls[i]).execute()); } boolean caughtError = false; int i; for (i = 0; i < urls.length; i++) { try { futures.get(i).get(); } catch (Exception e) { // assert that 2nd request fails, because maxTotalConnections=1 caughtError = true; break; } } assertEquals(i, 1); assertTrue(caughtError); } }
/** * 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); } }
/** * @param apiUrl the URL of the PredictionIO API * @param threadLimit maximum number of simultaneous threads (connections) to the API * @param queueSize size of the queue * @param timeout timeout in seconds for the connections */ public BaseClient(String apiUrl, int threadLimit, int queueSize, int timeout) { this.apiUrl = apiUrl; // Async HTTP client config AsyncHttpClientConfig config = (new AsyncHttpClientConfig.Builder()) .setAllowPoolingConnections(true) .setAllowPoolingSslConnections(true) .addRequestFilter(new ThrottleRequestFilter(threadLimit)) .setMaxConnectionsPerHost(threadLimit) .setRequestTimeout(timeout * 1000) .setIOThreadMultiplier(threadLimit) .build(); this.client = new AsyncHttpClient(new NettyAsyncHttpProvider(config), config); }
@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 setMaximumConnectionsPerHost(int defaultMaxConnectionPerHost) { builder.setMaxConnectionsPerHost(defaultMaxConnectionPerHost); }
public Builder setMaximumConnectionsPerHost(int defaultMaxConnectionPerHost) { configBuilder.setMaxConnectionsPerHost(defaultMaxConnectionPerHost); return this; }
public Builder setMaximumConnectionsPerHost(int defaultMaxConnectionPerHost) { configBuilder.setMaxConnectionsPerHost(defaultMaxConnectionPerHost); return this; }
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 setMaximumConnectionsPerHost(int defaultMaxConnectionPerHost) { configBuilder.setMaxConnectionsPerHost(defaultMaxConnectionPerHost); return this; }
protected AsyncHttpClientConfig.Builder httpClientBuilder() { return new AsyncHttpClientConfig.Builder()// .setAllowPoolingConnections(true)// .setMaxConnectionsPerHost(1)// .setMaxConnections(1)// .setConnectTimeout(1000)// .setRequestTimeout(1000).setFollowRedirect(true); }
protected AsyncHttpClient createHttpClient() throws KeyManagementException, NoSuchAlgorithmException { final AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder(); // Don't limit the number of connections per host // See https://github.com/ning/async-http-client/issues/issue/28 builder.setMaxConnectionsPerHost(-1); builder.setSSLContext(SslUtils.getInstance().getSSLContext()); return new AsyncHttpClient(builder.build()); }
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); }
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 setMaximumConnectionsPerHost(int defaultMaxConnectionPerHost) { configBuilder.setMaxConnectionsPerHost(defaultMaxConnectionPerHost); return this; }