Удержание http-запроса во время выполнения асинхронной обработки - PullRequest
0 голосов
/ 24 сентября 2018

У нас есть API, который работает как фасад, инкапсулируя вызов внутренней службы.Мы планируем изменить взаимодействие между фасадом и внутренней службой, потому что мы изменяем внутреннюю службу, чтобы использовать очереди, делая ее более устойчивой и эластичной.Мы не можем сейчас изменить способ, которым клиенты используют API, поэтому мы хотели бы сохранить блокирующий вызов между клиентом и фасадом.

Сервис предоставит веб-метод для получения запроса, отправивсообщение в очередь и ответ на звонок как можно скорее на фасад.Когда обработка будет завершена, служба вызовет внутренний веб-метод фасада, освобождая первый вызов (клиент к фасаду).

Call diagram

Фасад построен с использованием Spring Boot и MVC.Вопрос в том, как мы можем «удерживать» http-запрос клиента, ожидая сигнала от службы, чтобы вернуть данные клиенту.Мы рассмотрели следующие подходы:

  • При первом вызове API он генерирует уникальный идентификатор и отправляет его во внутреннюю службу.Затем веб-метод на фасаде будет опрашивать (проверять и переходить в режим сна) одноэлементный объект (возможно, ConcurrentHashMap), ища объект, связанный с уникальным идентификатором.Когда внутренняя служба сигнализирует о фасаде, она помещает результаты в одноэлементный объект, поэтому веб-метод может вернуть информацию клиенту.
  • Используя аналогичный подход, описанный выше с актерами Akka

Мы обеспокоены масштабируемостью и доступностью этого решения (мы знаем, что удерживать клиентский http-запрос нехорошо, но нам придется с этим смириться некоторое время).

Кто-нибудь здесь имелсделать что-то подобное?Какой подход был использован?Есть ли какая-то инфраструктура (Java), которую можно использовать?

1 Ответ

0 голосов
/ 24 сентября 2018

Многие технологии могут быть использованы для решения вашей проблемы, например: spring mvc и spring webflux

  • В Spring MVC я уже использовал DeferredResult, ResponseBodyEmitter и SseEmitter для обработки асинхронного запроса и возврата результата кклиент.

https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-async

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