我使用 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
空白的。
我尝试过的一些事情:
- 清除芹菜
- rabbitmq 上的 force_reset
- 本答案中概述的 rabbitmq 虚拟主机: Multi Celery projects with same RabbitMQ broker backend process
- 移动 django celery 设置并将 CELERY_CONFIG_MODULE 设置为正确的设置
- 将两个项目中的 CELERYD_CHDIR 设置为正确的目录
这些都没有阻止试图在 project1 celery 中工作的 project2 任务。
我在 Mac 上,如果这有所作为或有帮助的话。
更新
设置不同的虚拟主机使其一切正常。我只是把它配置错了。