504 Время ожидания шлюза в Spring Boot Rest требует тяжелой записи (более 80K) - PullRequest
0 голосов
/ 02 апреля 2019

Я получаю сообщение 504 Gateway Time-out Вызов Spring Boot Rest с использованием HTTP GET-вызова для тяжелой записи (более 80 КБ), я вызываю другую службу для получения данных с помощью объекта RestTemplate resClient, код такой, как показано ниже:

public ResponseEntity<String> getData(String endPointUrl, Map<String, Object> parameterMap, String smToken) throws Exception {
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        headers.add("Cookie", smToken);
        //headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        HttpEntity<Map<String, Object>> entity = new HttpEntity<Map<String, Object>>(parameterMap, headers);
        ResponseEntity<String> responseEntity = null;
        try {
            SSLUtil.turnOffSslChecking();
            LOGGER.info("Start call to end point : " +endPointUrl+ " at :"+ (new Date().toString()) );
            //resClient.getMessageConverters()
            //.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
            responseEntity = resClient.exchange(endPointUrl, HttpMethod.POST, entity,String.class);
            LOGGER.info("End of call to end point : " +endPointUrl+ " at :"+ (new Date().toString()) );
            LOGGER.debug("Response from end point: " + responseEntity);
        } catch (Exception e) {
            LOGGER.error("Exception while making a http call to " + endPointUrl,e);
            throw e;
        }

        return responseEntity;
    }

Во время отладки я вижу ответ от другого вызова службы. Требуется более 4 минут, но вместо того, чтобы ждать его к тому времени, чтобы получить ответ, который он использует, выходит только через 3 минуты.Как мы можем заставить его ждать ответа от другого вызова службы?

Я пытался решить эту проблему, увеличив время ожидания до 5 минут, используя атрибут server.connection-timeout = 300000 в application.properties, но яЯ получаю пустой ответ.Я не уверен, если это правильный подход или нет.Пожалуйста, помогите мне в этом вопросе.

Ответы [ 3 ]

0 голосов
/ 02 апреля 2019

504 Время ожидания шлюза, как правило, выбрасывается прокси-сервером, что означает, что сервер закрывает соединение.Если клиент закрывает соединение, то вы получите ошибку Connectiontimeout.

0 голосов
/ 02 апреля 2019

server.connection-timeout= #

Время ожидания соединителями другого HTTP-запроса перед закрытием соединения.Если не задано, используется значение по умолчанию для конкретного соединителя.

Use a value of -1 to indicate no (that is, an infinite) timeout. (might be bad fix)

ИЛИ Попробуйте установить его из приложения

@SpringBootApplication
public class Application {
    public static void main(String[] args) throws Exception {
        System.setProperty("server.port","8080"));
        System.setProperty("server.connection-timeout","300000");
        System.setProperty("server.tomcat.max-threads","yourValue"); //in-case if you want to chaneg number of thredas 
        SpringApplication.run(Application.class, args);
    }
}

Также см. Это

0 голосов
/ 02 апреля 2019

Попробуйте это

@Bean
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) 
    {
        return restTemplateBuilder
           .setConnectTimeout(...)
           .setReadTimeout(...)
           .build();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...