加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何知道一组RabbitMQ任务何时完成?

发布时间:2020-12-12 06:34:41 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用RabbitMQ让工作进程编码视频文件.我想知道所有文件何时完成 – 也就是说,当所有工作进程都完成时. 我能想到的唯一方法是使用数据库.视频完成编码后: UPDATE videos SET status = 'complete' WHERE filename = 'foo.wmv'-- etc etc etc as each wor
我正在使用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,你就完成了

要记住的是暂停 – 如果子进程死亡会发生什么?你必须做更多的工作,但基本上:

>对于每个发送的消息,包括某种ID,并将该ID和当前时间添加到哈希表.
>对于每个响应,从哈希表中删除该ID
>定期遍历哈希表并删除任何已超时的内容

这被称为Request Reply Pattern.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读