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