我扩展了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响应进入此方法。 任何关于可能出错的建议都将非常感激
答案 0 :(得分:0)
似乎ServiceUnavailableRetryStrategy
是一个更通用的接口,框架将使用它来确定它是否应该重试任何类型的错误代码。有一个名为DefaultServiceUnavailableRetryStrategy
的默认实现只检查503错误代码。这意味着当您提供自己的实现时,还应检查您感兴趣的特定错误代码(在本例中为503)并进行适当的响应。如果您检查DefaultServiceUnavailableRetryStrategy
的源代码,您可以看到它明确地将状态代码检查为:
return executionCount <= maxRetries &&
response.getStatusLine().getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE;