乔布斯向错误的芹菜开火

时间:2013-02-01 20:14:52

标签: django rabbitmq celery django-celery

我使用django celery和rabbitmq作为我的经纪人(来宾兔用户可以在本地机器上完全访问)。我有很多项目都在他们自己的virtualenv,但最近需要芹菜2他们。我有一个运行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芹菜。问题是当我在project2中工作时,即使芹菜没有在project1上运行,任何任务都会尝试在project1 celery中触发。

如果我重新启动project1_env并启动芹菜,我会得到

Received unregistered task of type 'update-jobs'.

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

...
push_queue  0
job_queue   0
...

我的环视设置以及CELERYD_CHDIRCELERY_CONFIG_MODULE都是空白的。

我尝试过的一些事情:

这些东西都没有停止尝试在project1芹菜中工作的project2任务。

我在Mac上,如果这有所作为或有帮助。

更新

设置不同的虚拟主机使其全部工作。我刚配置错了。

1 个答案:

答案 0 :(得分:3)

如果您要为两个Celery实例使用相同的RabbitMQ实例,则需要使用虚拟主机。这是我们使用的,它的工作原理。您提到您已尝试过,但您的代理URL均为amqp://guest@localhost:5672//,未指定虚拟主机。如果两个Celery实例都连接到同一主机和虚拟主机,它们将生成并使用同一组队列。