何时为apache httpclient调用ServiceUnavailableRetryStrategy

时间:2017-12-12 10:11:00

标签: java apache httpclient

我扩展了Apache HttpClient 4.5.3提供的ServiceUnavailableRetryStrategy接口。

我已经将retryRequest方法扩展如下

@Override
public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) {
    int statusCode = response.getStatusLine().getStatusCode();
    return false;
}

我期待statusCode的值是任何失败状态代码(4xx或5xx)。但是,我似乎收到了 200 响应代码。

我有什么遗失的吗? 该文档提到这用于处理服务不可用(503)响应,因此从未期望200响应进入此方法。 任何关于可能出错的建议都将非常感激

1 个答案:

答案 0 :(得分:0)

似乎ServiceUnavailableRetryStrategy是一个更通用的接口,框架将使用它来确定它是否应该重试任何类型的错误代码。有一个名为DefaultServiceUnavailableRetryStrategy的默认实现只检查503错误代码。这意味着当您提供自己的实现时,还应检查您感兴趣的特定错误代码(在本例中为503)并进行适当的响应。如果您检查DefaultServiceUnavailableRetryStrategy的源代码,您可以看到它明确地将状态代码检查为:

return executionCount <= maxRetries &&
    response.getStatusLine().getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE;