我试图了解消息代理和队列是否可以使用以下内容:
假设我有一个工作人员在资源上执行的任务队列。
我完全控制了工人的数量。举例来说,其中有两个。
任务在单个资源上运行。我几乎无法控制这些资源的数量,我只知道某些任务将适用于同一资源。资源数量比任务数量低许多倍。但总的来说,我不能创造与资源一样多的工人。
让我们说共有10个资源。当任务在资源上运行时,其他工作人员不应该启动在同一资源上运行的任务。
这可以用celery或rabbitmq来组织吗? 也许我的思考方式是错误的。
答案 0 :(得分:0)
我一直在考虑的一件事就是在整体上增加另一个经纪人。
因此,代理订阅原始任务队列并向工作人员发送消息。但在发送消息之前,它会检查资源是否已经忙。如果是这样,则会延迟重新执行任务。
资源状态可以是全局变量,工作人员自己也不需要关心它们。
Broker还必须从工人那里听取ack并相应地免费获得资源锁。
这有意义吗?那个经纪人当然不会扩展,但我可以稍后将资源状态放入Redis来解决这个问题。