【问题标题】:Jobs firing to wrong celery乔布斯开错了芹菜
【发布时间】:2013-02-01 20:14:51
【问题描述】:

我使用 django celery 和 rabbitmq 作为我的代理(guest rabbit 用户在本地计算机上具有完全访问权限)。我有一堆项目都在他们自己的 virtualenv 中,但最近需要在其中 2 个上使用 celery。我有一个 rabbitmq 实例正在运行

(project1_env)python manage.py celery worker
 normal celery stuff....
[Configuration]
   broker:      amqp://guest@localhost:5672//
   app:         default:0x101bd2250 (djcelery.loaders.DjangoLoader)

[Queues]
   push_queue:  exchange:push_queue(direct) binding:push_queue

在我的另一个项目中

(project2_env)python manage.py celery worker
 normal celery stuff....
[Configuration]
   broker:      amqp://guest@localhost:5672//
   app:         default:0x101dbf450 (djcelery.loaders.DjangoLoader)

[Queues]
   job_queue:   exchange:job_queue(direct) binding:job_queue

当我在 project1 代码中运行任务时,它会在 push_queue 中很好地触发 project1 celery。问题是当我在 project2 中工作时,即使 celery 没有在 project1 上运行,任何任务都会尝试在 project1 celery 中触发。

如果我启动 project1_env 并启动 celery,我会得到 ​​p>

Received unregistered task of type 'update-jobs'.

如果我在 rabbit 中运行 list_queues,它会显示所有队列

...
push_queue  0
job_queue   0
...

我的环境设置和CELERYD_CHDIRCELERY_CONFIG_MODULE 都是空白的。

我尝试过的一些事情:

这些都没有阻止试图在 project1 celery 中工作的 project2 任务。

我在 Mac 上,如果这有影响或有帮助的话。

更新

设置不同的虚拟主机使其一切正常。我只是把它配置错了。

【问题讨论】:

    标签: django rabbitmq celery django-celery


    【解决方案1】:

    如果您要为两个 Celery 实例使用相同的 RabbitMQ 实例,您将需要使用虚拟主机。这就是我们使用的并且有效。您提到您已经尝试过,但是您的代理 URL 都是 amqp://guest@localhost:5672//,没有指定虚拟主机。如果两个 Celery 实例都连接到同一个主机和虚拟主机,它们将产生到同一组队列并从同一组队列中消费。

    【讨论】:

    • 我已经尝试过了BROKER_URL = 'amqp://guest@localhost/project2',当我运行 celery worker 时,我什至得到了正确的经纪人。但我的任务仍然落在 project1 celery 上。我将再看看这个解决方案。我可能设置错了。
    • 想说我今天回到了这个。你的解决方案奏效了。这是2个问题。 1# 我确实有虚拟主机设置错误。 2# 我不小心将队列添加到我的 apply_async 调用中,并且那里的名称错误,所以即使他们被发送到错误的地方。把 2 个项目弄糊涂了。
    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 2013-10-04
    • 2017-07-27
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2012-07-29
    • 2012-07-17
    相关资源
    最近更新 更多