RestTemplate.exchange долгая задержка

Наше приложение Spring использует RestTemplate для отправки запросов HTTP 1.1 к конечным точкам веб-служб с помощью метода exchange (). В 99,8% случаев это работает нормально, но в 0,2% случаев это приводит к длительной (10-180 секунд) задержке между вызовом restTemplate.exchange () и тем, когда наш балансировщик нагрузки регистрирует HTTP-запрос (который затем пересылается). к веб-сервису). RestTemplate инициализируется без аргумента, указывающего альтернативный ClientHttpRequestFactory, поэтому я знаю, что этот код не использует преимущества пула соединений, например инициализируя его следующим образом:

restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory())

Логически ли это объясняет симптом, который я описываю, или мне следует продолжить расследование?

Это фрагмент кода, последняя строка которого в .exchange () приводит к снижению производительности в небольшом% случаев.

private <T> ResponseEntity<T> request(String project, 
    String url, 
    HttpMethod method, 
    HttpEntity<String> request, 
    ClientHttpRequestInterceptor moduleInterceptor, 
    ParameterizedTypeReference<T> parameterizedTypeReference) {

    log.info("request(): url - {}", url);
    List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
    if (moduleInterceptor != null) {
        interceptors.add(moduleInterceptor);
    }
    restTemplate.setInterceptors(interceptors);
    try {
        ResponseEntity<T> response = restTemplate.exchange(url, method, request, parameterizedTypeReference);

Вы нашли решение этого?

hellojava 15.04.2019 15:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
1
1 318
0

Другие вопросы по теме