Всем привет!
Нужна помощь, может кто-то сталкивался с таким... Суть проблемы:
В rest контроллер приходит запрос
метод@RequestMapping(value = "/ssp/test/{place_hash}", method = RequestMethod.GET)
@ResponseBody
public DeferredResult<String> test(
HttpServletRequest servletRequest, HttpServletResponse servletResponse)
throws Exception {
DeferredResult<String> output = new DeferredResult<>();
this.suspendedRequests.add(output);
output.onCompletion(() -> suspendedRequests.remove(output));
new Test(servletRequest, servletResponse, sspHandler).setValue(output);
return output;
}
А дальше должна быть следующая последовательность: запрос клиента -> обработка данных запроса ->
рассылка на 5 разных сторонних апи и ожидание ответа от них -> сбор данных с этой рассылки, формирование ответа -> возврат ответа клиенту
Проблема именно в том, как собрать обратно эти данные со всех 5 ответов, не задерживая надолго поток? У запросов стоят таймауты по 350 мс, но запрос сам выполняется почти 2 секунды, а это неимоверно долго
Я думал собрать из них ConcurrentLinkedDeque> и колбеками возвращать ответы, но получается, что всё равно поток будет ждать, пока они не закончат отправлять запросы.