Failsafe RetryPolicy - выдает исключение из supplyAsync - PullRequest
0 голосов
/ 02 декабря 2018

Я реализую политику повторных попыток.По сути, я хочу повторить запрос POST в отдельном потоке.Я использую failsafe от jhalterman (https://github.com/jhalterman/failsafe#asynchronous-api-integration) Вот мой код

Failsafe.with(retryPolicy).with(executor).future(() -> CompletableFuture.supplyAsync(() -> {
            try {
                CloseableHttpResponse response = client.execute(httpPost);
                httpPost.releaseConnection();
                client.close();
                return response;
            } catch (IOException e) {
                return null;
            }
        }).thenApplyAsync(response -> "Response: " + response)
          .thenAccept(System.out::println));

Я не хочу перехватывать здесь исключение IOException. Это обрабатывается политикой повтора. В настоящее время повторная попытка выиграна 'это происходит, так как я ловлю исключение здесь. Есть ли способ вызвать исключение из 'supplyAsync', чтобы оно было обработано политикой повторных попыток? Спасибо. Спасибо

1 Ответ

0 голосов
/ 02 декабря 2018

CompletionStage API предоставляет несколько различных способов обработки и работы с непроверенными исключениями.Но в вашем случае вы получаете исключение Checked, и вам не повезло.Вы должны либо справиться с этим, либо выбросить его наружу по направлению к своему абоненту.Вот один из способов сделать это, если вы предпочитаете последний подход.

Failsafe.with(retryPolicy).with(executor).future(() -> CompletableFuture.supplyAsync(() -> {
            try {
                // Remainder omitted
                return response;
            } catch (IOException e) {
                throw new CompletionException(e);
            }
        }).thenApplyAsync(response -> "Response: " + response)
          .thenAccept(System.out::println));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...