在消息队列设置中共享工作者之间的资源

时间:2018-01-29 17:49:23

标签: multithreading architecture rabbitmq distributed-system

我试图了解消息代理和队列是否可以使用以下内容:

假设我有一个工作人员在资源上执行的任务队列。

我完全控制了工人的数量。举例来说,其中有两个。

任务在单个资源上运行。我几乎无法控制这些资源的数量,我只知道某些任务将适用于同一资源。资源数量比任务数量低许多倍。但总的来说,我不能创造与资源一样多的工人。

让我们说共有10个资源。当任务在资源上运行时,其他工作人员不应该启动在同一资源上运行的任务。

这可以用celery或rabbitmq来组织吗? 也许我的思考方式是错误的。

1 个答案:

答案 0 :(得分:0)

我一直在考虑的一件事就是在整体上增加另一个经纪人。

因此,代理订阅原始任务队列并向工作人员发送消息。但在发送消息之前,它会检查资源是否已经忙。如果是这样,则会延迟重新执行任务。

资源状态可以是全局变量,工作人员自己也不需要关心它们。

Broker还必须从工人那里听取ack并相应地免费获得资源锁。

这有意义吗?那个经纪人当然不会扩展,但我可以稍后将资源状态放入Redis来解决这个问题。