java - 何时为 apache httpclient 调用 ServiceUnavailableRetryStrategy

标签 java apache httpclient

我扩展了 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/

相关文章:

java - 数据未保存在数据库中

java - 如何设置JXTreeTable第一列的背景颜色

php - Laravel 5.4 - 404 页面问题

php - 如何在 Amazon EC2 上配置 PHP + Apache?

ruby-on-rails - 我的 Rails 3 站点无法在 Ubuntu/Apache2/Passenger 上启动

c# - 如何使用 Moq 从 IHttpClientFactory 模拟 HTTPClient 并结合 .NET Core 中的 Polly 策略

java - 如何从设备读取十六进制格式的数据?

java - Android - php mysql。没有更新值

angular - 使用 ngx-leaflet、HTTPClient 和 Angular2+ 将 GeoJSON 数据获取到 Leaflet map

java - 使用 HttpClient 显示非 ASCII 字符