【发布时间】:2011-10-12 02:23:53
【问题描述】:
我正在使用 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
人们对此有什么特别的想法吗?
【问题讨论】: