@Override public void configure(Binder binder) { Multibinder<SingularityAuthenticator> multibinder = Multibinder.newSetBinder(binder, SingularityAuthenticator.class); for (SingularityAuthenticatorClass clazz : getConfiguration().getAuthConfiguration().getAuthenticators()) { multibinder.addBinding().to(clazz.getAuthenticatorClass()); if (clazz == SingularityAuthenticatorClass.WEBHOOK) { AuthConfiguration authConfiguration = getConfiguration().getAuthConfiguration(); AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() .setConnectionTimeoutInMs(authConfiguration.getWebhookAuthConnectTimeoutMs()) .setRequestTimeoutInMs(authConfiguration.getWebhookAuthRequestTimeoutMs()) .setMaxRequestRetry(authConfiguration.getWebhookAuthRetries()) .build(); SingularityAsyncHttpClient webhookAsyncHttpClient = new SingularityAsyncHttpClient(clientConfig); binder.bind(AsyncHttpClient.class).annotatedWith(Names.named(WEBHOOK_AUTH_HTTP_CLIENT)).toInstance(webhookAsyncHttpClient); } } binder.bind(SingularityAuthFeature.class); binder.bind(SingularityMultiMethodAuthenticator.class); binder.bind(SingularityAuthDatastore.class).to(getConfiguration().getAuthConfiguration().getDatastore().getAuthDatastoreClass()); binder.bind(SingularityAuthorizationHelper.class).in(Scopes.SINGLETON); } }
.setConnectionTimeoutInMs(CONNECTION_TIMEOUT) .setIdleConnectionInPoolTimeoutInMs(IDLE_CONNECTION_TIMEOUT) .setRequestTimeoutInMs(REQUEST_TIMEOUT).setMaxRequestRetry(0).build(); this.asyncHttpClient = new AsyncHttpClient(config);
.setConnectionTimeoutInMs(CONNECTION_TIMEOUT) .setIdleConnectionInPoolTimeoutInMs(IDLE_CONNECTION_TIMEOUT) .setRequestTimeoutInMs(REQUEST_TIMEOUT).setMaxRequestRetry(0).build(); this.asyncHttpClient = new AsyncHttpClient(config);
configBuilder.setCompressionEnabled( useCompression ); configBuilder.setFollowRedirects( true ); configBuilder.setMaxRequestRetry( 0 ); configBuilder.setRequestTimeoutInMs( ConfigUtils.getInteger( session, ConfigurationProperties.DEFAULT_REQUEST_TIMEOUT, ConfigurationProperties.REQUEST_TIMEOUT ) );
configBuilder.setCompressionEnabled( useCompression ); configBuilder.setFollowRedirects( true ); configBuilder.setMaxRequestRetry( 0 ); configBuilder.setRequestTimeoutInMs( ConfigUtils.getInteger( session, ConfigurationProperties.DEFAULT_REQUEST_TIMEOUT, ConfigurationProperties.REQUEST_TIMEOUT ) );
/** * 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 public void configure(Binder binder) { Multibinder<SingularityAuthenticator> multibinder = Multibinder.newSetBinder(binder, SingularityAuthenticator.class); for (SingularityAuthenticatorClass clazz : getConfiguration().getAuthConfiguration().getAuthenticators()) { multibinder.addBinding().to(clazz.getAuthenticatorClass()); if (clazz == SingularityAuthenticatorClass.WEBHOOK) { AuthConfiguration authConfiguration = getConfiguration().getAuthConfiguration(); AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() .setConnectionTimeoutInMs(authConfiguration.getWebhookAuthConnectTimeoutMs()) .setRequestTimeoutInMs(authConfiguration.getWebhookAuthRequestTimeoutMs()) .setMaxRequestRetry(authConfiguration.getWebhookAuthRetries()) .build(); SingularityAsyncHttpClient webhookAsyncHttpClient = new SingularityAsyncHttpClient(clientConfig); binder.bind(AsyncHttpClient.class).annotatedWith(Names.named(WEBHOOK_AUTH_HTTP_CLIENT)).toInstance(webhookAsyncHttpClient); } } binder.bind(SingularityAuthFeature.class); binder.bind(SingularityMultiMethodAuthenticator.class); binder.bind(SingularityAuthDatastore.class).to(getConfiguration().getAuthConfiguration().getDatastore().getAuthDatastoreClass()); binder.bind(SingularityAuthorizationHelper.class).in(Scopes.SINGLETON); } }
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); } }
@Override public Builder getAsyncHttpClientConfigBuilder( final ProxyRepository repository, final RemoteStorageContext ctx ) { if ( shutdown ) { throw new IllegalStateException( "AHC provider was shut down, not serving client up anymore." ); } final Builder result = getAsyncHttpClientConfigBuilder( ctx ); result.setUserAgent( userAgentBuilder.formatRemoteRepositoryStorageUserAgentString( repository, ctx ) ); // enable redirects for RRS use result.setFollowRedirects( true ); // limiting (with httpClient defaults) to prevent bashing of remote repositories result.setMaximumConnectionsPerHost( 20 ); result.setMaximumConnectionsTotal( 20 ); // proxy-logic will handle retries result.setMaxRequestRetry( 0 ); return result; }
/** * Constructor that uses default settings for {@link #asyncHttpClient} but allows you to specify whether or not you * want subspans for each downstream request. * * @param performSubSpanAroundDownstreamCalls * Pass in true to have a distributed tracing subspan added to each downstream call to measure the time spent * on the downstream call, false if you do not want subspans performed. The subspans can be used to determine * how much time is spent processing in your app vs. waiting for downstream requests. */ public AsyncHttpClientHelper(boolean performSubSpanAroundDownstreamCalls) { this( new AsyncHttpClientConfig.Builder() .setAllowPoolingConnections(true) .setMaxRequestRetry(0) .setRequestTimeout(DEFAULT_REQUEST_TIMEOUT_MILLIS) .setConnectionTTL(DEFAULT_POOLED_DOWNSTREAM_CONNECTION_TTL_MILLIS), performSubSpanAroundDownstreamCalls ); }
public AsyncHttpClientCube( CubeBuilder cubeBuilder ) { super( cubeBuilder ); NettyAsyncHttpProviderConfig conf = new NettyAsyncHttpProviderConfig(); conf.addProperty( NettyAsyncHttpProviderConfig.BOSS_EXECUTOR_SERVICE, Executors.newSingleThreadExecutor() ); AsyncHttpClientConfig asyncHttpClientConfig = new AsyncHttpClientConfig.Builder().setAsyncHttpClientProviderConfig( conf ) // .setAllowPoolingConnection( true ) // .setAllowSslConnectionPool( true ) // .setConnectionTimeoutInMs( cubeBuilder.getConnectionTimeout() ) // .setRequestTimeoutInMs( cubeBuilder.getPostTimeout() ) // .setMaxRequestRetry( 1 ) // .setMaximumConnectionsPerHost( cubeBuilder.getDefaultMaxPerRoute() ) // .setMaximumConnectionsTotal( cubeBuilder.getMaxTotalConnections() ) // .build(); this.asyncHttpClient = new AsyncHttpClient( asyncHttpClientConfig ); }
@Test(groups = { "standalone", "default_provider" }) public void testMaxRetry() throws Throwable { try (AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setMaxRequestRetry(0).build())) { client.executeRequest(client.prepareGet(getTargetUrl()).build()).get(); fail(); } catch (Exception t) { assertNotNull(t.getCause()); assertEquals(t.getCause().getClass(), IOException.class); if (t.getCause() != AsyncHttpProviderUtils.REMOTELY_CLOSED_EXCEPTION) { fail(); } } } }
public AsyncHttpClientConfig getAsyncHttpClientConfig() { // for this test brevity's sake, we are limiting to 1 retries return new AsyncHttpClientConfig.Builder().setMaxRequestRetry(0).setRequestTimeout(10000).build(); }
/** * Set the number of time a request will be retried when an {@link java.io.IOException} occurs because of a Network exception. * * @param maxRequestRetry the number of time a request will be retried * @return this */ public Builder setMaxRequestRetry(int maxRequestRetry) { configBuilder.setMaxRequestRetry(maxRequestRetry); return this; }
/** * Set the number of time a request will be retried when an {@link java.io.IOException} occurs because of a Network exception. * * @param maxRequestRetry the number of time a request will be retried * @return this */ public Builder setMaxRequestRetry(int maxRequestRetry) { configBuilder.setMaxRequestRetry(maxRequestRetry); return this; }
/** * Set the number of time a request will be retried when an {@link java.io.IOException} occurs because of a Network exception. * * @param maxRequestRetry the number of time a request will be retried * @return this */ public Builder setMaxRequestRetry(int maxRequestRetry) { configBuilder.setMaxRequestRetry(maxRequestRetry); 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()); }
/** * Set the number of time a request will be retried when an {@link java.io.IOException} occurs because of a Network exception. * * @param maxRequestRetry the number of time a request will be retried * @return this */ public Builder setMaxRequestRetry(int maxRequestRetry) { configBuilder.setMaxRequestRetry(maxRequestRetry); return this; }