Я использую Jetty, чтобы получать запросы к серверу и повторять попытки, если они терпят неудачу,
но у меня есть несколько вопросов, касающихся обработки исключений и того, как их интерпретировать.
Код выглядит как ниже
public void run() {
final int MAX_CONNECTION_WAIT_TIME = 90;
final long requestTimeOut = 2L;
long sleep = 1L;
do {
final HttpClient httpClient = new HttpClient();
try {
httpClient.start();
final String resp = httpClient
.newRequest(socket)
.timeout(requestTimeOut, TimeUnit.SECONDS)
.send().getContentAsString();
//do something with the resp
} catch (TimeoutException toe) {
//what it means?
} catch (ExecutionException ee) {
//what it means?
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
} finally {
httpClient.stop();
}
//wait until the next time
try {
TimeUnit.SECONDS.sleep(sleep);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
} while (sleep < MAX_CONNECTION_WAIT_TIME);
}
Если запрос не удастся (могут быть периодические проблемы с сетью), я хочу повторить попытку, но только несколько раз, а не навсегда.
Если вышеупомянутое условие происходит
- Какое исключение произойдет первым?
- Означает ли TimeoutException исключение ExecutionException?
- в случае сбоя запроса будет выдано исключение ExecutionException или TimeoutException?
В документации написано
InterruptedException – if send thread is interrupted
java.util.concurrent.TimeoutException – if send times out
java.util.concurrent.ExecutionException – if execution fails
Прямо сейчас я игнорирую TimeoutException и перехватываю исключение ExecutionException, и оно ведет себя хорошо, это правильный путь или я что-то упускаю?