芹菜通过对等方重置连接

Posted

技术标签:

【中文标题】芹菜通过对等方重置连接【英文标题】:Celery gives connection reset by peer 【发布时间】:2014-08-30 02:28:04 【问题描述】:

我设置了 rabbitmqserver 并使用以下步骤添加了用户:

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...

一切看起来都很完美!有人可以帮助我在这里缺少什么吗?

【问题讨论】:

5672 端口打开了吗?连接网址的/phantom 部分是否正确? @Eric Workman 是的,确认我做了一个 telnet:LM-SJN-00871893:tasks uruddarraju$ telnet 10.98.85.92 5672 Trying 10.98.85.92... 连接到 。转义字符是 '^]'。 ^] /phantom 是我创建的虚拟主机,我在这里使用了这个文档:[link] (celery.readthedocs.org/en/latest/getting-started/brokers/…) 看一下rabbitmq日志文件,通常位于/var/log/rabbitmq/ =INFO REPORT==== 9-Jul-2014::12:00:00 === 接受 AMQP 连接 (10.225.82.229:52828 -> 10.98.85.92: 5672) =警告报告==== 2014 年 7 月 9 日::12:00:00 === 关闭 AMQP 连接 (10.225.82.229:52828 -> 10.98.85.92:5672): connection_closed_abruptly =INFO报告==== 9-Jul-2014::12:00:12 === 接受 AMQP 连接 (10.225.82.229:52832 -> 10.98.85.92:5672) =警告报告==== 9 -Jul-2014::12:00:12 === 关闭 AMQP 连接 (10.225.82.229:52832 -> 10.98.85.92:5672): connection_closed_abruptly @user2027279 这是我在时间跨度中看到的 请问有什么cmets吗? 【参考方案1】:

我发现 Connection rest by peer 错误,并假设 RabbitMQ 没有在侦听端口或有防火墙阻止它。事实并非如此。

在 Ubuntu 16.04.2 LTS 上运行 RabbitMQ,apt 安装的版本:3.5.7-1ubuntu0.16.04.1

“netstat -a”对于 Rabbit 端口 5672 的输出如下所示:

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

然而,Rabbit 实际上同时监听了 IPv4 地址和 IPv6 地址。我用netcat验证了这一点。

要从另一台机器访问 Rabbit,您必须使用以下命令设置用户帐户:

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 .* .* .*

问题是我的网址。我的看起来像:

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

在倒数第二个正斜杠之后是虚拟主机的名称。上面,我给我的虚拟主机命名为 celery_vhost。要连接,我需要将 URL 更改为:

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

我在查看 /var/log/rabbitmq 中的 Rabbit 日志时发现了这一点。当我输入错误的 URL 时,有一个包含以下错误的 .log 文件:

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

【讨论】:

如果要查看用户列表和虚拟主机列表,可以使用rabbitmqctl list_usersrabbitmqctl list_vhosts【参考方案2】:

一旦我将代码部署到生产环境,并将 celery 升级到 3.1.12,问题就解决了。我最初使用 3.0.19 但后来升级并没有发现任何问题。感谢您的支持。

【讨论】:

以上是关于芹菜通过对等方重置连接的主要内容,如果未能解决你的问题,请参考以下文章

气流 [Errno 104] 对等方重置连接

CURL错误:Recv失败:通过对等方重置连接 - PHP Curl

simplexml_load_file 通过 url 读取远程 xml,由对等方重置连接

在Android中获取“SocketException:对等方重置连接”

Ubuntu 16.04 - Vagrant Box问题:ssh_exchange_identification:读取:通过对等方重置连接

在 Python 中使用 Twitch IRC 时“由对等方重置连接”