Я использую RabbitMQ, чтобы рабочие процессы кодировали видеофайлы.Я хотел бы знать, когда все файлы будут завершены, то есть когда все рабочие процессы будут завершены.
Единственный способ, которым я могу думать, это использовать базу данных.Когда видео завершает кодирование:
UPDATE videos SET status = 'complete' WHERE filename = 'foo.wmv'
-- etc etc etc as each worker finishes --
И затем, чтобы проверить, все ли видео были закодированы:
SELECT count(*) FROM videos WHERE status != 'complete'
Но если я собираюсь сделать это, тоЯ чувствую, что теряю преимущество RabbitMQ как механизма для нескольких распределенных рабочих процессов, поскольку мне все еще приходится вручную поддерживать очередь базы данных.
Существует ли стандартный механизм для зависимостей RabbitMQ?То есть способ сказать «подождать, пока эти 5 задач завершатся, и как только они будут выполнены, а затем запустить новую задачу?»
Я не хочу, чтобы родительский процесс добавил эти задачи вочередь, а затем «ждать», пока каждый из них вернет «завершенный» статус.Затем я должен поддерживать отдельный процесс для каждой группы видео, и в этот момент я потерял преимущество отсоединенных рабочих процессов по сравнению с одной концепцией ThreadPool.
Я спрашиваю о том, что невозможно?Или существуют стандартные широко распространенные решения для управления общим состоянием задач в очереди, которые я пропустил?
Редактировать: после поиска я нашел такой похожий вопрос: Получение результата длительного выполнениязадание с RabbitMQ
Есть ли у людей какие-то особые мысли по этому поводу?