2

私はブローカーとしてdjango celeryとrabbitmqを使用しています(ゲストのウサギユーザーはローカルマシンにフルアクセスできます)。私はすべて独自のvirtualenvにたくさんのプロジェクトを持っていますが、最近そのうち2つでセロリが必要でした。実行中のrabbitmqのインスタンスが1つあります

(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 セロリで起動しようとすることです。

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を使っています。

アップデート

さまざまな仮想ホストをセットアップすると、すべてが機能しました。設定を間違えただけです。

4

1 に答える 1

3

両方の Celery インスタンスに同じ RabbitMQ インスタンスを使用する場合は、仮想ホストを使用する必要があります。これは私たちが使用しているものであり、機能します。試してみたとのことですが、ブローカーの URL は両方ともamqp://guest@localhost:5672//で、仮想ホストが指定されていません。両方の Celery インスタンスが同じホストおよび仮想ホストに接続されている場合、それらは同じキューのセットに対して生成および消費します。

于 2013-02-01T20:29:41.603 に答える