【问题标题】:Celery creates 3 queues in RabbitMQ message queueCelery 在 RabbitMQ 消息队列中创建 3 个队列
【发布时间】:2022-06-10 18:37:50
【问题描述】:

当我使用延迟函数将我的任务推送到队列时,我使用 celery 作为任务队列和 RabbitMQ 作为消息队列。我看到在 rabbit mq 中创建了 3 个队列。我不明白我们需要什么以及为什么需要这 2 个额外的队列。另外,我如何确定我的任务实际上被推入了哪个队列?

开始芹菜:

celery -A myproject worker -l info

[tasks]
  . app1.tasks.add

[2022-06-10 06:16:14,132: INFO/MainProcess] Connected to amqp://himanshu:**@IPADDRESS/vhostcheck
[2022-06-10 06:16:14,142: INFO/MainProcess] mingle: searching for neighbors
[2022-06-10 06:16:15,165: INFO/MainProcess] mingle: all alone
[2022-06-10 06:16:15,182: WARNING/MainProcess] /etc/myprojectenv/lib/python3.8/site-packages/celery/fixups/django.py:203: UserWarning: Using settings.DEBUG leads to a memory
            leak, never use this setting in production environments!
  warnings.warn('''Using settings.DEBUG leads to a memory

[2022-06-10 06:16:15,182: INFO/MainProcess] celery@ubuntu-s-1vcpu-1gb-blr1-01 ready.
[2022-06-10 06:17:38,485: INFO/MainProcess] Task app1.tasks.add[be566921-b320-466c-b406-7a6ed7ab06e7] received
[2022-06-10 06:16:15,182: INFO/MainProcess] celery@ubuntu-s-1vcpu-1gb-blr1-01 ready.
[2022-06-10 06:17:38,485: INFO/MainProcess] Task app1.tasks.add[be566921-b320-466c-b406-7a6ed7ab06e7] received
[2022-06-10 06:19:18,544: INFO/ForkPoolWorker-1] Task app1.tasks.add[be566921-b320-466c-b406-7a6ed7ab06e7] succeeded in 100.05838803993538s: 13

所以每当我运行 celery worker 时,我都会看到这 3 个队列正在生成。

RabbitMQ 管理

这 3 个队列是什么? celery 用它们做什么?

此外,由于队列基本上是持久性数据库,因此是持久性队列,那么为什么当我停止工作人员时它们会被删除。我看到我停止芹菜后这里只有 1 个队列。

【问题讨论】:

    标签: rabbitmq celery message-queue system-design rabbitmq-management


    【解决方案1】:
    • celery 队列在那里,您可以将任务发送到该特定队列。每个订阅此队列的 Celery 工作人员都将能够保留和运行发送给它的任务。
    • .pidbox 队列由每个 Celery 工作人员创建,以支持远程命令的执行。
    • celeryev 队列也由每个 Celery 工作人员创建并用于监控。例如,每个 Celery 工作人员都会每隔几秒广播一次心跳消息。这些消息进入celeryev 队列。

    【讨论】: