Асинхронная обработка запросов на рендеринг#
Основной сценарий:#
Клиентское приложение отправляет запрос на генерацию изображения дашборда.
Сервер принимает запрос и помещает задачу в очередь сообщений (например, RabbitMQ, Redis Queue).
Возвращает клиенту ответ с идентификатором задачи (
task_id) и статусомaccepted.Отдельный воркер извлекает задачу из очереди.
Воркер запускает процесс рендеринга: открывает дашборд в headless-браузере, делает скриншот, сохраняет PNG.
После успешного завершения воркер сохраняет результат (ссылку на файл или бинарные данные) и обновляет статус задачи на
completed.Клиент периодически опрашивает API по
task_id, чтобы проверить статус.При получении статуса
completedклиент забирает результат.
Альтернативный сценарий:#
Если очередь задач перегружена, новые задачи помещаются в очередь с приоритетом в зависимости от роли пользователя или типа дашборда.
Клиент может подписаться на вебхук-уведомление: после завершения обработки сервер отправляет результат на указанный URL.
При наличии кэшированной версии изображения (по параметрам запроса) задача не ставится в очередь — возвращается готовый результат.
Исключительный сценарий:#
Если воркер не может обработать задачу (ошибка рендеринга, недоступен дашборд), статус задачи обновляется на
failed, в лог записывается ошибка.При превышении времени обработки (тайм-аут) задача помечается как
failed, клиенту возвращается ошибка504 Gateway Timeout.Если очередь недоступна, сервер возвращает
503 Service Unavailable.При отсутствии прав доступа к дашборду — возвращается
403 Forbidden.Если клиент опрашивает несуществующий
task_id— возвращается404 Not Found.