Получение результата длительной задачи с RabbitMQ

У меня есть сценарий, в котором клиент отправляет HTTP-запрос для загрузки файла. Файл должен создаваться динамически и обычно занимает 5-15 секунд. Поэтому я ищу решение, которое разбивает эту операцию на 3 HTTP-запроса.

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

Для реализации этого я просматриваю очередь сообщений такие решения, как RabbitMQ. Похоже, они обеспечивают надежную основу для асинхронного выполнения длительных задач. Однако после прочтения руководств на RabbitMQ я не уверен, как я получу результат операции.

Вот что я имел в виду:

Внешний сервер получает запросы от клиентов и отправляет сообщения в RabbitMQ по мере необходимости. Этот интерфейсный сервер будет иметь 3 конечные точки

/generate
/poll
/download

. Когда клиент вызывает / generate с параметром GET , скажем, request_uid = AAA , интерфейсный сервер отправит сообщение RabbitMQ с request_uid в полезной нагрузке. Впоследствии любой свободный работник получит это сообщение и начнет генерировать файл, соответствующий AAA .

Клиент будет продолжать опрашивать / poll с request_uid = AAA для проверки если задача была завершена.

Когда задача будет завершена, клиент вызовет / download с request_uid = AAA , ожидая загрузки файла.

Вопрос в том, как обработчики / poll и / download внешнего сервера узнают о состоянии задания генерации файлов? Как RabbitMQ может передать результат задачи производителю. Или мне нужно реализовать такой механизм вне RabbitMQ? (Потребитель помещает свои результаты в файл / var / completed / AAA )

5
задан Jayesh 3 May 2011 в 13:52
поделиться