@Provides @Singleton @Named(LOCAL_DOWNLOAD_HTTP_CLIENT) public AsyncHttpClient providesHttpClient(SingularityExecutorConfiguration configuration) { AsyncHttpClientConfig.Builder configBldr = new AsyncHttpClientConfig.Builder(); configBldr.setRequestTimeoutInMs((int) configuration.getLocalDownloadServiceTimeoutMillis()); configBldr.setIdleConnectionTimeoutInMs((int) configuration.getLocalDownloadServiceTimeoutMillis()); configBldr.addRequestFilter(new ThrottleRequestFilter(configuration.getLocalDownloadServiceMaxConnections())); return new AsyncHttpClient(configBldr.build()); }
.addRequestFilter(new ThrottleRequestFilter(MAX_CONNECTIONS)) .setConnectionTimeoutInMs(CONNECTION_TIMEOUT) .setIdleConnectionInPoolTimeoutInMs(IDLE_CONNECTION_TIMEOUT)
.addRequestFilter(new ThrottleRequestFilter(MAX_CONNECTIONS)) .setConnectionTimeoutInMs(CONNECTION_TIMEOUT) .setIdleConnectionInPoolTimeoutInMs(IDLE_CONNECTION_TIMEOUT)
/** * @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 loadThrottleTest() throws Throwable { AsyncHttpClientConfig.Builder b = new AsyncHttpClientConfig.Builder(); b.addRequestFilter(new ThrottleRequestFilter(10)); try (AsyncHttpClient client = getAsyncHttpClient(b.build())) { List<Future<Response>> futures = new ArrayList<>(); for (int i = 0; i < 200; i++) { futures.add(client.preparePost(getTargetUrl()).execute()); } for (Future<Response> f : futures) { Response r = f.get(); assertNotNull(f.get()); assertEquals(r.getStatusCode(), 200); } } }
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); }
@Test(groups = { "standalone", "default_provider" }) public void maxConnectionsText() throws Throwable { AsyncHttpClientConfig.Builder b = new AsyncHttpClientConfig.Builder(); b.addRequestFilter(new ThrottleRequestFilter(0, 1000)); try (AsyncHttpClient client = getAsyncHttpClient(b.build())) { client.preparePost(getTargetUrl()).execute().get(); fail("Should have timed out"); } catch (ExecutionException ex) { assertTrue(ex.getCause() instanceof FilterException); } }
private AsyncHttpClient buildClient() { if (oAuth2ConfigBuilder != null) { oAuth2Config = oAuth2ConfigBuilder.build(); // TODO create request+response filters in OAuth2Config // -> handle new endpoints, refresh tokens... OAuth2RequestFilter oauth2Filter = new OAuth2RequestFilter(oAuth2Config.getAccessTokenEndpoint(), oAuth2Config.getClientId(), oAuth2Config.getClientSecret()); oauth2Filter.setCredentials(oAuth2Config.getUsername(),oAuth2Config.getPassword()); oauth2Filter.setSchemeName(oAuth2Config.getOAuth2Scheme()); builder.addRequestFilter(oauth2Filter); } return new AsyncHttpClient(builder.build()); }
@Test(groups = { "standalone", "default_provider" }) public void basicTest() throws Throwable { AsyncHttpClientConfig.Builder b = new AsyncHttpClientConfig.Builder(); b.addRequestFilter(new ThrottleRequestFilter(100)); try (AsyncHttpClient client = getAsyncHttpClient(b.build())) { Response response = client.preparePost(getTargetUrl()).execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); } }
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); }