我正在使用 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
人们对此有什么特别的想法吗?
最佳答案
使用“响应”队列。我不知道关于 RabbitMQ 的任何细节,所以这是一般的:
numSent == numResponded
, 大功告成 要记住的是超时——如果子进程死了会发生什么?你必须做更多的工作,但基本上:
这称为 Request Reply Pattern .
关于sql - 如何知道一组RabbitMQ任务何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734597/