我使用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_CHDIR
和CELERY_CONFIG_MODULE
都是空白的。
我尝试过的一些事情:
这些东西都没有停止尝试在project1芹菜中工作的project2任务。
我在Mac上,如果这有所作为或有帮助。
更新
设置不同的虚拟主机使其全部工作。我刚配置错了。
答案 0 :(得分:3)
如果您要为两个Celery实例使用相同的RabbitMQ实例,则需要使用虚拟主机。这是我们使用的,它的工作原理。您提到您已尝试过,但您的代理URL均为amqp://guest@localhost:5672//
,未指定虚拟主机。如果两个Celery实例都连接到同一主机和虚拟主机,它们将生成并使用同一组队列。