Как поставить запросы API в очередь с RabbitMQ - PullRequest
0 голосов
/ 05 декабря 2018

Я бы хотел поставить в очередь запросы, сделанные мобильным приложением, которое использует API для отправки некоторых данных на сервер.

На данный момент сценарий выглядит следующим образом:

  1. Отправка мобильного приложениязапрос с некоторыми данными
  2. Мне нужно получить данные, проверить их (несколько запросов к БД) и сохранить в несколько таблиц в БД.
  3. Мне нужно вернуть ответ OK на мобильное приложениеили неверный запрос со списком ошибок в случае, если проверка не удалась.

Теперь, если за 3 секунды у меня будет 1 000 таких запросов, мой сервер рухнет.

Я хотел бы использоватьRabbitMQ для постановки этих запросов в очередь.Но что мне делать с ответом?Я не могу отправить OK после того, как RabbitMQ получил сообщение, потому что я не знаю, пройдет ли проверка.То есть мобильное приложение будет ждать, пока сообщение RabbitMQ будет правильно использовано?

1 Ответ

0 голосов
/ 06 декабря 2018

Это может быть решением вашей проблемы:

  1. Клиент отправляет запрос
  2. Сервер ставит запрос в очередь и генерирует уникальный идентификатор, который принадлежит запросу в очереди, изатем отправляет ответ, содержащий сгенерированный идентификатор с кодом состояния 202 (Принятый), который означает, что запрос был помещен в очередь или отправлен на сервер, но ответа пока нет.
  3. Клиент подписывается на сгенерированный идентификатор в сообщенииbroker
  4. После завершения запроса на сервере на сервере он публикует ответ брокеру сообщений на основе сгенерированного идентификатора для запроса
  5. Клиент получит опубликованный ответ по идентификатору подписки

Советы:

  • Я использую EMQTT для брокера сообщений.Другим вариантом будет плагин Rabbitmq MQTT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...