Używam RabbitMQ, aby procesy robocze kodowały pliki wideo. Chciałbym wiedzieć, kiedy wszystkie pliki są kompletne - to znaczy, gdy wszystkie procesy robocze zostały zakończone.Jak sprawdzić, kiedy zestaw zadań RabbitMQ jest kompletny?
Jedyny sposób, w jaki mogę to zrobić, to użycie bazy danych. Po zakończeniu kodowania wideo:
UPDATE videos SET status = 'complete' WHERE filename = 'foo.wmv'
-- etc etc etc as each worker finishes --
A następnie sprawdzić, czy wszystkie filmy zostały zakodowane:
SELECT count(*) FROM videos WHERE status != 'complete'
Ale jeśli mam zamiar to zrobić, wtedy czuję się jak tracę korzyści RabbitMQ jako mechanizmu dla wielu rozproszonych procesów roboczych, ponieważ wciąż muszę ręcznie utrzymywać kolejkę bazy danych.
Czy istnieje standardowy mechanizm dla zależności RabbitMQ? Oznacza to, że można powiedzieć "poczekaj aż te 5 zadań się zakończy, a kiedy skończą, a następnie rozpoczną nowe zadanie?"
Nie chcę, aby proces nadrzędny dodał te zadania do kolejki, a następnie "zaczekaj", aż każdy z nich zwróci status "ukończony". Następnie muszę utrzymywać oddzielny proces dla każdej grupy filmów, w którym to momencie straciłem przewagę oddzielonych procesów roboczych w porównaniu z pojedynczą koncepcją ThreadPool.
Czy proszę o coś, co jest niemożliwe? Czy istnieją standardowe, powszechnie przyjęte rozwiązania do zarządzania ogólnym stanem zadań w kolejce, które przeoczyłem?
Edycja: po poszukiwaniach, znalazłem to podobne pytanie: Getting result of a long running task with RabbitMQ
istnieją jakieś szczególne myśli, że ludzie mają na ten temat?
Kciuk w górę za odniesienie do nazwy wzoru. –