下面列出了怎么用org.apache.http.client.ServiceUnavailableRetryStrategy的API类实例代码及写法,或者点击链接到github查看源代码。
public static CloseableHttpClient getHttpClient(final int executionCount, int retryInterval) {
ServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy = new MyServiceUnavailableRetryStrategy.Builder()
.executionCount(executionCount).retryInterval(retryInterval).build();
return HttpClientBuilder.create().setRetryHandler(new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException e, int count, HttpContext contr) {
if (count >= executionCount) {
// Do not retry if over max retry count
return false;
}
if (e instanceof InterruptedIOException) {
// Timeout
return true;
}
return true;
}
}).setServiceUnavailableRetryStrategy(serviceUnavailableRetryStrategy)
.setConnectionManager(new PoolingHttpClientConnectionManager()).build();
}
public static CloseableHttpClient getHttpClient(final int executionCount, int retryInterval) {
ServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy = new MyServiceUnavailableRetryStrategy.Builder()
.executionCount(executionCount).retryInterval(retryInterval).build();
return HttpClientBuilder.create().setRetryHandler(new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException e, int count, HttpContext contr) {
if (count >= executionCount) {
// Do not retry if over max retry count
return false;
}
if (e instanceof InterruptedIOException) {
// Timeout
return true;
}
return true;
}
}).setServiceUnavailableRetryStrategy(serviceUnavailableRetryStrategy)
.setConnectionManager(new PoolingHttpClientConnectionManager()).build();
}
public static synchronized CloseableHttpClient getClient() {
if (HttpUtils.client == null) {
HttpUtils.client = HttpClientBuilder.create()
.setConnectionManager(new PoolingHttpClientConnectionManager())
.setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() {
private int interval = 1;
@Override
// retry at most 4 times if a 5xx status code is received, or no status line is present
public boolean retryRequest(final HttpResponse resp, final int executionCount, final HttpContext context) {
if (executionCount > 4) {
return false;
}
if (resp.getStatusLine() == null) {
return true;
}
final int statusCode = resp.getStatusLine().getStatusCode();
return 500 <= statusCode && statusCode < 600;
}
@Override
public long getRetryInterval() {
final int retryInterval = interval;
interval *= 2;
return retryInterval;
}
})
.build();
}
return HttpUtils.client;
}
public ServiceUnavailableRetryStrategy getServiceUnavailableRetryStrategy() {
return this.serviceUnavailableRetryStrategy;
}
public void setServiceUnavailableRetryStrategy(final ServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy) {
this.serviceUnavailableRetryStrategy = serviceUnavailableRetryStrategy;
}
private ServiceUnavailableRetryStrategy createServiceUnavailableRetryStrategy() {
return new DefaultServiceUnavailableRetryStrategy(3, 2000);
}
private ServiceUnavailableRetryStrategy createServiceUnavailableRetryStrategy() {
return new DefaultServiceUnavailableRetryStrategy(RETRY_COUNT, RETRY_INTERVAL_IN_MILLIS);
}
@Override
protected ServiceUnavailableRetryStrategy getServiceUnavailableRetryStrategy() {
return new OctaneUnauthorizedRetryStrategy();
}
public void setServiceUnavailableRetryStrategy(final ServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy) {
this.serviceUnavailableRetryStrategy = serviceUnavailableRetryStrategy;
}