11

django と rabbit-mq で celeryd をセットアップしようとしています。これまでのところ、次のことを行いました。

  • pip からインストールされたセロリ
  • リポジトリから利用可能なdebを介してrabbitmqをインストールしました
  • rabbitmqctl を介して rabbitmq にユーザーと vhost を追加し、そのユーザーの権限も追加しました
  • rabbitmq サーバーを起動しました
  • pip経由でインストールされたdjango-celery
  • テーブルを含むdjango-celeryをセットアップします
  • settings.py でさまざまなことを構成しました (BROKER_HOST、BROKER_PORT、BROKER_USER、BROKER_PASSWORD、BROKER_VHOST、djecelery のインポート、setup 関数の呼び出し、INSTALLED APPS への追加)。再確認しましたが、これらの値はすべて正しいです (少なくとも、ユーザー、パスワード、仮想ホストは正しいです)。

そのため、実行するpython manage.py celeryd -l infoと接続エラーが発生します(以下を参照)。誰でも理由がわかりますか?

$ python manage.py celeryd -l info
/usr/local/lib/python2.7/dist-packages/djcelery/loaders.py:108: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warnings.warn("Using settings.DEBUG leads to a memory leak, never "
[2012-05-15 18:38:04,486: WARNING/MainProcess]  

 -------------- celery@ubuntu v2.5.3
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      amqp://celeryuser@localhost:5672/celeryhost
- ** ----------   . loader:      djcelery.loaders.DjangoLoader
- ** ----------   . logfile:     [stderr]@INFO
- ** ----------   . concurrency: 1
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery


[Tasks]


[2012-05-15 18:38:04,562: INFO/PoolWorker-1] child process calling self.run()
[2012-05-15 18:38:04,565: WARNING/MainProcess] celery@ubuntu has started.
[2012-05-15 18:38:07,572: ERROR/MainProcess] Consumer: Connection Error: [Errno 104] Connection reset by peer. Trying again in 2 seconds...
^C[2012-05-15 18:38:08,434: WARNING/MainProcess] celeryd: Hitting Ctrl+C again will terminate all running tasks!
[2012-05-15 18:38:08,435: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess)
[2012-05-15 18:38:09,372: INFO/PoolWorker-1] process shutting down
[2012-05-15 18:38:09,373: INFO/PoolWorker-1] process exiting with exitcode 0
[2012-05-15 18:38:09,376: INFO/MainProcess] process shutting down
4

5 に答える 5

12

あなたの問題は にありBROKER_URLます。

を追加するVHOSTと、正しい構成は次のようになります。

BROKER_URL='amqp://celeryuser@localhost:5672//'
BROKER_VHOST='/celeryhost'
于 2012-09-27T21:46:13.287 に答える
4

私はRabbitMQで同様の問題を抱えていましたが、ユーザーがRabbitMQでメッセージを作成する権限を持っていないという問題がありました.

ゲストユーザーを使用して、RabbitMQ サーバーで次のスクリプトを実行してみてください。ジョブが作成される場合は、ユーザーで試してください。

from celery import Celery

app = Celery('tasks', broker='amqp://radek:**@localhost:5672//')

@app.task
def add(x, y):
    return x + y

同じエラーが発生した場合は、ユーザーの権限を設定してください:

rabbitmqctl set_permissions -p / radek ".*" ".*" ".*"
于 2014-10-29T11:24:08.347 に答える
1

rabbitmq サーバーが稼働していてはならず、適切に構成されていてはなりません。それが正しいことを確認して、もう一度試してください。あるいは、何かをテストしようとしているだけで、キューにとらわれない場合は、rabbitmq を取り出して redis の使用を開始してください。構成がはるかに簡単です。

プロジェクトの 1 つからこのコードをカット アンド ペーストしただけで、問題なく動作します。

import djcelery
from datetime import timedelta

djcelery.setup_loader()


BROKER_BACKEND = "redis"
BROKER_HOST = "localhost"
BROKER_PORT = 6379
BROKER_VHOST = "0"

CELERYD_LOG_LEVEL  = 'DEBUG'
CELERY_RESULT_BACKEND = "redis"
CELERY_TASK_RESULT_EXPIRES = 150000
REDIS_HOST = "localhost"
REDIS_PORT = 6379
REDIS_DB = "0"
CELERYD_CONCURRENCY = 1
CELERYD_MAX_TASKS_PER_CHILD = 4

CELERY_IMPORTS = (
    "apps.app1.tasks",
    "apps.app2.tasks",
)
于 2012-05-16T04:30:33.690 に答える
1

あなたの BROKER_URL は settings.py でどのように見えますか?

デフォルトではRabbitMQはゲストユーザーなので、接続できれば

BROKER_URL = "amqp://guest:guest@localhost:5672//"

問題は、RabbitMQs ユーザー、パスワード、または仮想ホストの設定です。

于 2012-06-10T21:47:39.850 に答える