我正在使用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概念相比,我已經失去了解耦的工作流程的優勢。
我在問一些不可能的事嗎?或者,是否有標準的廣泛採用的解決方案來管理我錯過的隊列中的任務總體狀態?
編輯:搜索之後,我發現這個類似的問題:Getting result of a long running task with RabbitMQ
有什麼特別的想法,人們對這個?
贊成引用模式名稱。 –