java.net.httpClient Как установить RetryRequestHandler? - PullRequest
0 голосов
/ 13 февраля 2019

В настоящее время я заменяю существующую клиентскую библиотеку org.apache.http.* http новой HDTP библиотекой JDK-11 .Есть много интересных новых функций, однако я не нашел ничего о том, «как установить RetryRequestHandler в новый HTTPClient».Фрагмент кода предыдущего построителя httpclient:

    ...
    ...
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create()
            .setDefaultRequestConfig(config)
            .setConnectionManager(connectionManager)
    if(retryCount > 0) {
        httpClientBuilder.setRetryHandler(new RetryRequestHandler(retryCount, url));
    }
    if (proxyHost) {
        HttpHost proxy = new HttpHost(proxyHost, proxyPort, "http");
        httpClientBuilder.setProxy(proxy);
    }
    ...
    ...

Здесь RetryRequestHandler является расширением DefaultHttpRequestRetryHandler

public class RetryRequestHandler extends DefaultHttpRequestRetryHandler{...} 

Невозможно установить повтор в новом Java-HttpClient.Есть ли обходной путь для этого?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Java.net.http HttpClient будет повторять идемпотентные запросы (GET / HEAD) один раз по умолчанию.Обычно это полезно для HTTP / 1.1 долгосрочных подключений, когда серверная сторона может произвольно решить, что подключение слишком долго не используется, и закрыть его одновременно с тем, что клиент извлекает его из пула и начинает отправлять новый запрос..

0 голосов
/ 13 февраля 2019

Spring разбил попытку повторения из Spring Batch в отдельную автономную библиотеку, которую вы можете использовать (хотя и внутри проекта Spring).Это позволит вам добавить политику повторов к методу, вызывающему нового HTTP-клиента.См. Документы ниже:

https://github.com/spring-projects/spring-retry

Это самая близкая вещь, которую я знаю для этой ситуации.Если вы хотите бросить свой собственный, вы также можете сделать то же самое с аспектами.Я думаю, что библиотека Spring более чистая, потому что вы можете позволить библиотеке обрабатывать детали повторных попыток.У них также есть мощный набор API для различных политик повторов, включая экспоненциальный откат и т. Д.

...