2

我使用 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,我会得到

Received unregistered task of type 'update-jobs'.

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

...
push_queue  0
job_queue   0
...

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

我尝试过的一些事情:

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

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

更新

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

4

1 回答 1

3

If you're going to be using the same RabbitMQ instance for both Celery instances, you'll want to use virtual hosts. This is what we use and it works. You mention that you've tried it, but your broker URLs are both amqp://guest@localhost:5672//, with no virtual host specified. If both Celery instances are connected to the same host and virtual host, they will produce to and consume from the same set of queues.

于 2013-02-01T20:29:41.603 回答