heroku - Celery在RabbitMQ上创建多个队列——非默认队列没有消费者

标签 heroku rabbitmq celery django-celery

我使用 Django Celery 和 RabbitMQ 后端,全部托管在 Heroku 上。

从 Celery 文档中可以清楚地看出,Celery 旨在为任务创建新队列。我的问题是,当我进入 RabbitMQ 控制台时,我看到只有默认队列有任何消费者(celeryd 实例)连接到它。结果是,非默认队列上的所有任务都不会运行。

由于 Celery 文档明确指出 Celery 应该创建许多队列,所以我觉得我的配置中肯定缺少一些非常基本的东西。尽管如此,我无法让我的消费者“跳来跳去”并寻找非空队列——他们只是停留在空的默认队列上。

关于如何解决这个问题有什么想法吗?

谢谢!

最佳答案

我一直遇到和你一样的问题,但是深入研究文档,我认为发生的情况是,即使队列是自动创建的,你仍然需要明确告诉你的 Celery 工作人员从新创建的队列开始消费队列。

根据文档,工作人员明确绑定(bind)到一个或多个队列。也就是说,如果您在启动工作程序时未指定 -Q 参数,它将被绑定(bind)到“默认”队列,另一方面,如果您为 -Q 参数提供一个值,那么它将被绑定(bind)到到您提供的那些特定队列。我理解这意味着您不能将工作人员绑定(bind)到“未定义”队列(或稍后将创建的队列)。

来自文档: http://docs.celeryproject.org/en/latest/userguide/workers.html#queues

似乎要让您的工作人员开始从新创建的队列中消费,您可以使用 add_consumer() 方法向他们发送一条消息(在运行时)来执行此操作。

关于heroku - Celery在RabbitMQ上创建多个队列——非默认队列没有消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943344/

相关文章:

ruby-on-rails - 我如何运行 rake db :migrate in automated deploy with heroku or heroku-api gem?

node.js - RabbitMQ vs Socket.io?

java - 使用 RabbitMQ/ActiveMQ 的自定义消息?

python - 如何使用 Celery 和 Flask 实现缓存系统

python - 多台机器上的 Celery 任务

css - Rails 4, Assets 编译

ruby-on-rails - Heroku:PG::ConnectionBad:无法连接到服务器:没有这样的文件或目录

node.js - Heroku 上出现 H10 "App crashed"错误,但描述性不强

python - 昆布+RabbitMQ : Check whether a queue is empty

python - Celery 连接代理丢失导致 CPU 使用率达到 100%