首页 > 解决方案 > 有一个带有多个队列的芹菜工人有什么意义?

问题描述

从多个队列消费的Celery工作人员如何决定从哪个队列开始消费?

我已经设置了一个工作人员并让它监听两个队列。我从上面链接的问题中了解到,工作人员会循环使用这两个队列中的消息,或者按照它们到达的顺序(取决于 celery 版本)。

那么这个设置的目的是什么?为什么它与单个队列不同?这仅对监控有帮助,还是我在这里缺少操作优势?

标签: celeryscheduled-tasks

解决方案


在大多数情况下,您的工作人员只会订阅一个队列,但是在某些情况下能够订阅多个队列是有意义的。

这是一个。想象一下,你有一个由 10 台机器组成的 Celery 集群。他们执行各种任务,其中有一项任务是从远程文件服务器下载文件。但是,文件服务器的所有者仅将 10 个机器 IP 中的两个列入白名单,因此基本上只有其中两个可以从该特定文件服务器下载文件。通常,您会让这两台机器上的 Celery 工作人员订阅一个额外的队列,例如称为“下载”,并通过将下载任务发送到“下载”队列来安排下载任务。

这是一个非常常见的场景,其中一部分节点可以做特定的事情(访问远程服务器 - 文件服务器、数据库服务器等)。

有人可能会争论“为什么不在这两台机器上设置‘下载’队列?” - 这可能是一种资源浪费。


推荐阅读