gpt4 book ai didi

java - HttpRequestRetryHandler 处理哪些异常?

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:11:07 24 4
gpt4 key购买 nike

我正在尝试在我的 Android 应用程序中实现 HttpRequestRetryHandler。我已阅读 HttpRequestRetryHandler here 的文档.

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {

public boolean retryRequest(
IOException exception,
int executionCount,
HttpContext context) {
if (executionCount >= 5) {
// Do not retry if over max retry count
return false;
}
if (exception instanceof InterruptedIOException) {
// Timeout
return false;
}
if (exception instanceof UnknownHostException) {
// Unknown host
return false;
}
if (exception instanceof ConnectException) {
// Connection refused
return false;
}
if (exception instanceof SSLException) {
// SSL handshake exception
return false;
}
HttpRequest request = (HttpRequest) context.getAttribute(
ExecutionContext.HTTP_REQUEST);
boolean idempotent = !(request instanceof HttpEntityEnclosingRequest);
if (idempotent) {
// Retry if the request is considered idempotent
return true;
}
return false;
}

};

httpclient.setHttpRequestRetryHandler(myRetryHandler);

文档中的示例指出不应重试某些异常。例如,不应重试 InterruptedIOException。

问题 1 为什么不应该重试 InterruptedIOException?

问题 2 如何知道哪些异常需要重试,哪些不应该重试?例如 - 我们是否应该重试 ConnectionTimeoutException 和 SocketTimeoutException?

还有文档说HttpClient 假设 GET 和 HEAD 等非实体封闭方法是幂等的,而 POST 和 PUT 等实体封闭方法则不是。 p>

问题 3 这是否意味着我们不应该重试 POST 和 PUT 方法,如果不是,那么我们应该如何重试 HttpPost 请求?

最佳答案

我认为它只是RetryHandler 实现的一个例子。

Question 1 Why InterruptedIOException should not be retried?

在示例中,我认为超时的原因是 URL 上的资源不可用,因此重试不会做任何更好的事情。这就是原因,它被设置为false。如果在您的情况下,您认为这可能只是因为连接速度慢或某些间歇性问题,请随时将其设置为 true 以重试。

Question 2 How to know which exception to retry and which should not? For example - Should we retry ConnectionTimeoutException and SocketTimeoutException or not?

任何您认为是由于暂时性问题引起的异常,您都可以重试。其原因在性质上更具永久性的任何异常(exception)情况,例如资源未找到或某些业务异常不应重试,因为它们总是会失败。

Question 3 Does this mean we should not retry POST and PUT method and if not, then how should we retry HttpPost request?

重试仅适用于无需任何外部依赖即可重新启动流程的场景。

关于java - HttpRequestRetryHandler 处理哪些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com