Служба REST не отвечает через 1 минуту после запроса - PullRequest
0 голосов
/ 04 ноября 2018

У нас есть RESTful API в нашем бэкэнде, и есть эта важная служба, которой требуется более 1 минуты, чтобы подготовиться к ответу.

Таким образом, примерно через 90 секунд ответ готов и процесс завершен, но браузер не получает ответа от сервера (в ожидании), а затем, в конце концов, происходит сбой (изображение ниже). Я проверил сервер с низким уровнем данных и подтвердил, что это происходит только тогда, когда для ответа требуется более 1 минуты. Как я могу исправить эту проблему?

Сбой ответа после того, как ничего не происходит

Это услуга:

@POST
@Path("/search")
public Response hotelSearch(@RequestBody InputValues value) {
   /* sending request to several other API 
       retrieving data from PostgreSQL DB
       creating a big DTO

   */
    return Response.ok(DTO).build();
}

ПРИМЕЧАНИЕ: мы используем apache-tomcat 9.0.8, JAVA 8! импортированные зависимости:

compile 'org.springframework:spring-web:4.3.6.RELEASE'
compile 'org.springframework:spring-orm:4.0.2.RELEASE'
compile 'org.springframework:spring-aspects:4.0.2.RELEASE'
compile 'org.springframework.security:spring-security-web:3.2.1.RELEASE'
compile 'org.springframework.security:spring-security-config:3.2.1.RELEASE'
compile 'org.springframework.security:spring-security-cas:3.2.1.RELEASE
compile 'org.glassfish.jersey.ext:jersey-spring3:2.6'

1 Ответ

0 голосов
/ 04 ноября 2018

Вместо возврата ответа HTTP 200 OK при наличии всех результатов можно сразу же вернуть ответ HTTP 202 Accepted с заголовком Location, где клиент может получить результаты, как только они появятся.

Затем клиент будет запрашивать URL-адрес в заголовке Location, пока все результаты не будут готовы с использованием метода GET.

Если клиент получает результаты до того, как они будут готовы, верните ответ HTTP 404 Not Found, необязательно с заголовком «Retry-After».

Когда клиент получает завершенные результаты, просто верните ответ HTTP 200 OK со всеми результатами в теле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...