Celery:连接到RabbitMQ服务器时出错

jay*_*yde 14 rabbitmq celery python-2.7

我开始使用芹菜,遵循"芹菜的第一步".我完全使用了该链接上指示的tasks.py.但是当我运行任务时,

celery -A tasks worker --loglevel=info
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

[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...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

有了这个,我做了以下工作以确保'guest'用户拥有/ vhost的权限:

sudo rabbitmqctl set_permissions -p / guest ".*" ".*" ".*"
Run Code Online (Sandbox Code Playgroud)

然后我重新加载/重新启动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 ".*" ".*" ".*"
Run Code Online (Sandbox Code Playgroud)

然后将tasks.py修改为:

app = Celery('tasks', broker='amqp://jm-user1@localhost//jm-vhost')
Run Code Online (Sandbox Code Playgroud)

但是当我开始完成任务时,我仍然得到同样的错误.我该如何解决这个问题?提前致谢!

jay*_*yde 20

通过执行以下操作,我能够解决此问题(对于那些已经并且将会遇到相同问题的人).

我在我的问题上重新创建了我提到的用户,但这次是用密码.像这样:

sudo rabbitmqctl add_user jm-user1 sample
Run Code Online (Sandbox Code Playgroud)

然后我再次设置权限:

sudo rabbitmqctl set_permissions -p jm-vhost jm-user1 ".*" ".*" ".*"
Run Code Online (Sandbox Code Playgroud)

重新启动rabbitmq服务器以确保更改生效并对tasks.py进行了修改:

app = Celery('tasks', broker='amqp://jm-user1:sample@localhost/jm-vhost')
Run Code Online (Sandbox Code Playgroud)

我跑的时候

celery -A tasks worker --loglevel=info
Run Code Online (Sandbox Code Playgroud)

有效 :).

希望这对其他人有帮助.多谢你们!