Как поставить в очередь запросы API с RabbitMQ

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

Сценарий на данный момент такой:

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
442
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Советы:

  • Я использую EMQTT для брокера сообщений. Другой вариант - плагин Rabbitmq MQTT.

Другие вопросы по теме