Apache HttpClient:重试故障安全结果 400(错误请求)
Apache HttpClient : Retry with failsafe results in 400 (bad request)
我正在使用 Apache HttpClient
和 Failsafe java 库。下面是(伪)代码的样子:
RetryPolicy<CloseableHttpResponse> policy = new RetryPolicy<>()
.handleResultIf(/* Response code is 404 */)
.withMaxRetries(5)
.withDelay(Duration.ofSeconds(10));
CloseableHttpResponse response = Failsafe.with(policy).get(() -> httpClient.execute(myRequest));
它正在 localhost
调用测试端点,我模拟它执行以下操作:
- Return 前 3 个请求为 404
- Return 第 4 个请求 200
现在,当我执行上面的代码时,我看到了以下行为:
- HttpClient 发送
get
请求,结果为 404
- 由于响应是
404
,重试策略启动并重试请求
- 重试请求失败
400
没有实际到达代理
- 所有后续重试都失败并显示
400
。响应没有任何正文
我希望第 2 步中的请求能够命中我的模拟,但是,它没有命中就失败了。 HttpClient
是否缓存响应或尝试阻止后续重试?
显然,在为 httpClient
调用 execute
之前,我在使用 addHeader
方法的请求中设置了 headers。这导致请求具有重复的 Content-Type
和 Authorization
headers.
由于这些 header 值肯定无效,请求导致 400
错误而没有命中 url。
我正在使用 Apache HttpClient
和 Failsafe java 库。下面是(伪)代码的样子:
RetryPolicy<CloseableHttpResponse> policy = new RetryPolicy<>()
.handleResultIf(/* Response code is 404 */)
.withMaxRetries(5)
.withDelay(Duration.ofSeconds(10));
CloseableHttpResponse response = Failsafe.with(policy).get(() -> httpClient.execute(myRequest));
它正在 localhost
调用测试端点,我模拟它执行以下操作:
- Return 前 3 个请求为 404
- Return 第 4 个请求 200
现在,当我执行上面的代码时,我看到了以下行为:
- HttpClient 发送
get
请求,结果为 404 - 由于响应是
404
,重试策略启动并重试请求 - 重试请求失败
400
没有实际到达代理 - 所有后续重试都失败并显示
400
。响应没有任何正文
我希望第 2 步中的请求能够命中我的模拟,但是,它没有命中就失败了。 HttpClient
是否缓存响应或尝试阻止后续重试?
显然,在为 httpClient
调用 execute
之前,我在使用 addHeader
方法的请求中设置了 headers。这导致请求具有重复的 Content-Type
和 Authorization
headers.
由于这些 header 值肯定无效,请求导致 400
错误而没有命中 url。