Jetty HttpClient ExecutionException против InterruptedException - PullRequest
0 голосов
/ 20 мая 2019

Я использую 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, и оно ведет себя хорошо, это правильный путь или я что-то упускаю?

...