Celery 连接被对方重置

10 投票
3 回答
14180 浏览
提问于 2025-04-18 12:36

我设置了rabbitmq服务器,并通过以下步骤添加了用户:

uruddarraju@*******:/usr/lib/rabbitmq/lib/rabbitmq_server-3.2.3$ sudo rabbitmqctl list_users 
Listing users ...
guest   [administrator]
phantom [administrator]
phantom1    []

sudo rabbitmqctl set_permissions -p phantom phantom1 ".*" ".*" ".*"

uruddarraju@******:/usr/lib/rabbitmq/lib/rabbitmq_server-3.2.3$ sudo netstat -tulpn | grep :5672
tcp6       0      0 :::5672                 :::*                    LISTEN      31341/beam.smp  

我的celery配置是这样的:

BROKER_URL = 'amqp://phantom:phantom1@10.98.85.92/phantom'

我的代码是这样的:

__author__ = 'uruddarraju'

from celery import Celery
import time
import celeryconfig

app = Celery('tasks')
app.config_from_object(celeryconfig)


@app.task
def add(x, y):
    print 'sleeping'
    time.sleep(20)
    print 'awoke'
    return x + y

当我尝试运行时:

celery -A celery worker --loglevel=info 

我得到了:

[2014-07-08 23:30:05,028: ERROR/MainProcess] consumer: Cannot connect to amqp://phantom:**@10.98.85.92:5672/phantom:
[Errno 54] Connection reset by peer.
Trying again in 2.00 seconds...
[2014-07-08 23:30:07,101: ERROR/MainProcess] consumer: Cannot connect to amqp://phantom:**@10.98.85.92:5672/phantom:
[Errno 54] Connection reset by peer.
Trying again in 4.00 seconds...

一切看起来都很完美!!有人能帮我看看我漏掉了什么吗?

3 个回答

0

我遇到了一个类似的错误,叫做ConnectionResetError: [Errno 104] Connection reset by peer,这个错误让我困惑了很久。后来我查看了兔子(Rabbit)日志,发现里面记录着凭证无效的信息。于是我在兔子管理界面里修改了这些凭证,结果问题就解决了。

6

我遇到了“连接被对方重置”的错误,开始以为是RabbitMQ没有在指定端口上监听,或者是防火墙把它挡住了。但其实不是这样的。

我在Ubuntu 16.04.2 LTS上运行RabbitMQ,使用apt安装的版本是3.5.7-1ubuntu0.16.04.1。

我用'netstat -a'命令查看RabbitMQ的5672端口,结果是这样的:

$ netstat -a|grep -i amqp
tcp6       0      0 [::]:amqp               [::]:*                  LISTEN

实际上,RabbitMQ确实在IPv4和IPv6地址上都在监听。我用netcat确认了这一点。

如果你想从另一台机器连接到RabbitMQ,你需要设置一个用户账户,可以用类似下面的命令:

sudo rabbitmqctl add_user celery celerypassword
sudo rabbitmqctl add_vhost celery_vhost
sudo rabbitmqctl set_user_tags celery celerytag
sudo rabbitmqctl set_permissions -p celery_vhost celery .* .* .*

问题出在我的URL上。我的URL看起来是这样的:

BROKER_URL = 'amqp://celery:celerypassword@10.0.3.3//'

在倒数第二个斜杠后面是vhost的名字。我给我的vhost起了个名字叫celery_vhost。要连接的话,我需要把URL改成:

BROKER_URL = 'amqp://celery:celerypassword@10.0.3.3/celery_vhost'

我是在查看RabbitMQ的日志时发现这个问题的,日志文件在/var/log/rabbitmq里。有一个.log文件,当我使用错误的URL时,里面记录了以下错误:

{handshake_error,opening,0,
{amqp_error,access_refused,
"access to vhost '/' refused for user 'celery'",
'connection.open'}}
1

这个问题在我把代码上线后解决了,同时我把celery升级到了3.1.12。最开始我用的是3.0.19,但后来升级了,没发现任何问题。感谢大家的支持。

撰写回答