@alenov
Программист

Как согласовать синхронный запрос от frontend к WebAPI и асинхронный от WebAPI к микросервисам, а потом вернуть ответ в frontend?

Не нашёл понятного мне паттерна реализации взаимодействия между компонентами микросервисной системы. В частности, примера, как реализовать связку между синхронным вызовом от клиента и его асинхронной обработкой. Поясню.

Есть приложение, построенное на микросервисах. Есть:
- фронтэнд (клиент на React, Vue, на чём угодно),
- публичный бэкэнд (WebAPI), обрабатывающий запросы от фронтэнда, + возможно какие-то дополнительные публичные микросервисы,
- набор внутренних микросервисов, принимающих запросы от бэкэнда через брокер сообщений (kafka, RabbitMQ, что угодно).

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

Фронтэнд даёт СИНХРОННЫЙ запрос в бэкэнд, и ждёт ответа. Запрос может быть типа асинхронным, т.е. с помощью Async AJAX, но по сути он всё равно держит коннект с сервером, потому что нужно сохранить канал, по которому вернётся ответ. Бэкэнд, получив запрос, отправляет его в асинхронную среду, а по факту - отправляет сообщение брокеру сообщений. В этот момент бэкэнд не имеет прямого коннекта с микросервисом-исполнителем, он просто должен подождать ответ от брокера. Но у него есть коннект с фронтэндом, по которому он отправит ответ, который он получит (или не получит никогда) от брокера. Т.е. бэкэнд должен держать коннект с фронтэндом, и при этом ждать ответ от брокера. Как это реализуется физически?
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы