让一个 celery worker 有多个队列有什么意义?
What's the point of having a single celery worker with multiple queues?
继续How does a Celery worker consuming from multiple queues decide which to consume from first?
我设置了一个 worker 并让它监听两个队列。我从上面的链接问题中了解到,工作人员将以循环方式或按照它们到达的顺序(取决于 celery 版本)使用来自这两个队列的消息。
那么这个设置的目的是什么?为什么它与单个队列不同?这是否仅对监控有帮助,还是我在这里缺少运营优势?
在大多数情况下,您会让工作人员仅订阅单个队列,但在某些情况下,订阅多个队列的能力是有意义的。
这是一个。假设您有一个由 10 台机器组成的 Celery 集群。他们执行各种任务,其中有一项任务是从远程文件服务器下载文件。但是,文件服务器的所有者只将 10 个机器 IP 中的两个列入白名单,因此基本上只有其中两个可以从该特定文件服务器下载文件。通常,您会让这两台机器上的 Celery worker 订阅一个额外的队列,例如称为“下载”,并通过将下载任务发送到“下载”队列来安排下载任务。
这是一个非常常见的场景,您的节点子集可以做特定的事情(访问远程服务器 - 文件服务器、数据库服务器等)。
有人可能会争辩说“为什么这两台机器上不只有 'download' 队列?” - 这可能是一种资源浪费。
继续How does a Celery worker consuming from multiple queues decide which to consume from first?
我设置了一个 worker 并让它监听两个队列。我从上面的链接问题中了解到,工作人员将以循环方式或按照它们到达的顺序(取决于 celery 版本)使用来自这两个队列的消息。
那么这个设置的目的是什么?为什么它与单个队列不同?这是否仅对监控有帮助,还是我在这里缺少运营优势?
在大多数情况下,您会让工作人员仅订阅单个队列,但在某些情况下,订阅多个队列的能力是有意义的。
这是一个。假设您有一个由 10 台机器组成的 Celery 集群。他们执行各种任务,其中有一项任务是从远程文件服务器下载文件。但是,文件服务器的所有者只将 10 个机器 IP 中的两个列入白名单,因此基本上只有其中两个可以从该特定文件服务器下载文件。通常,您会让这两台机器上的 Celery worker 订阅一个额外的队列,例如称为“下载”,并通过将下载任务发送到“下载”队列来安排下载任务。
这是一个非常常见的场景,您的节点子集可以做特定的事情(访问远程服务器 - 文件服务器、数据库服务器等)。
有人可能会争辩说“为什么这两台机器上不只有 'download' 队列?” - 这可能是一种资源浪费。