我扩展了 Apache HttpClient 4.5.3 提供的 ServiceUnavailableRetryStrategy 接口(interface)。
我已经扩展了 retryRequest 方法,如下
@Override
public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) {
int statusCode = response.getStatusLine().getStatusCode();
return false;
}
我期望 statusCode 的值是任何失败状态代码(4xx 或 5xx)。但是我似乎收到了 200 响应代码。
我有什么遗漏的吗? 文档提到这是为了处理 Service Unavailable(503) 响应,因此从未预料到 200 响应会进入此方法。 任何有关可能出现问题的建议将不胜感激
最佳答案
似乎ServiceUnavailableRetryStrategy
是一个更通用的接口(interface),框架将使用它来确定是否应该重试任何类型的错误代码。有一个名为 DefaultServiceUnavailableRetryStrategy
的默认实现,它仅检查 503 错误代码。这意味着当您提供自己的实现时,您还应该检查您感兴趣的特定错误代码(在本例中为 503)并做出适当的响应。如果您检查 DefaultServiceUnavailableRetryStrategy
的源代码,您可以看到它显式检查状态代码为:
return executionCount <= maxRetries &&
response.getStatusLine().getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE;
关于java - 何时为 apache httpclient 调用 ServiceUnavailableRetryStrategy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47769992/