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