web-dev-qa-db-ja.com

Celery:RabbitMQサーバーへの接続エラー

私はこれに従ってセロリを使い始めています "セロリの最初のステップ" 。私はそのリンクに示されているtasks.pyを正確に使用しました。しかし、私が使用してタスクを実行したとき、

celery -A tasks worker --loglevel=info

このエラーが発生しています:

[2014-09-16 20:52:57,427: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: Socket closed. Trying again in 2.00 seconds...

Rabbitmqサーバーは確実に実行されており、以下はエラーに関するログのスニペットです。

=ERROR REPORT==== 16-Sep-2014::20:53:09 ===
exception on TCP connection <0.235.0> from 127.0.0.1:58162
{channel0_error,starting,
            {amqp_error,access_refused,
                        "AMQPLAIN login refused: user 'guest' - invalid credentials",
                        'connection.start_ok'}}

=INFO REPORT==== 16-Sep-2014::20:53:09 ===
closing TCP connection <0.235.0> from 127.0.0.1:58162

=INFO REPORT==== 16-Sep-2014::20:53:15 ===
accepted TCP connection on [::]:5672 from 127.0.0.1:58163

=INFO REPORT==== 16-Sep-2014::20:53:15 ===
starting TCP connection <0.239.0> from 127.0.0.1:58163

=ERROR REPORT==== 16-Sep-2014::20:53:18 ===
exception on TCP connection <0.239.0> from 127.0.0.1:58163
{channel0_error,starting,
            {amqp_error,access_refused,
                        "AMQPLAIN login refused: user 'guest' - invalid credentials",
                        'connection.start_ok'}}

=INFO REPORT==== 16-Sep-2014::20:53:18 ===
closing TCP connection <0.239.0> from 127.0.0.1:58163

これを使用して、「ゲスト」ユーザーが/ vhostへの権限を持っていることを確認するために次のことを行いました。

Sudo rabbitmqctl set_permissions -p / guest ".*" ".*" ".*"

次に、rabbitmqサービスをリロード/再起動して、変更が有効になることを確認してから、タスクを再度実行しました。ただし、エラーは同じです。

別のvhost(jm-vhost)とユーザー(jm-user1)を作成して、すべてに許可するように再度権限を設定しました。

Sudo rabbitmqctl add_vhost jm-vhost
Sudo rabbitmqctl add_user jm-user1 ""   --> "" to make it passwordless (is this correct?)
Sudo rabbitmqctl set_permissions -p /jm-vhost jm-user1 ".*" ".*" ".*"

そして、tasks.pyを次のように変更しました。

app = Celery('tasks', broker='amqp://jm-user1@localhost//jm-vhost')

しかし、タスクを開始したときも、同じエラーが発生します。どうすれば解決できますか?前もって感謝します!

15
jaysonpryde

私はこれを解決することができました(同じ問題が発生している人と今後発生する人のために)。

質問で述べたユーザーを再作成しましたが、今回はパスワードを使用しました。このような:

Sudo rabbitmqctl add_user jm-user1 sample

次に、これを使用して権限を再度設定します。

Sudo rabbitmqctl set_permissions -p jm-vhost jm-user1 ".*" ".*" ".*"

Rabbitmqサーバーを再起動して、変更が有効になり、tasks.pyに変更を加えたことを確認します。

app = Celery('tasks', broker='amqp://jm-user1:sample@localhost/jm-vhost')

私が走ったとき

celery -A tasks worker --loglevel=info

出来た :)。

うまくいけば、これは他の人の助けになるでしょう。みんなありがとう!

19
jaysonpryde

broker_urlの形式は次のとおりです。

transport://userid:password@hostname:port/virtual_Host

http://docs.celeryproject.org/en/latest/userguide/configuration.html#broker-url

2
ForRealHomie