Как узнать, когда набор задач RabbitMQ завершен?

Я использую 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

Есть ли у людей какие-то особые мысли по этому поводу?

10
задан Community 23 May 2017 в 12:31
поделиться