【问题标题】:Connect to RabbitMQ instance remotely (created on AWS)远程连接到 RabbitMQ 实例(在 AWS 上创建)
【发布时间】:2021-01-07 23:01:00
【问题描述】:

我无法连接到 RabbitMQ 实例(这是我第一次这样做)。我在 AWS 上创建了一个,并获得了访问我能够访问的管理面板的权限。

我正在尝试使用以下代码连接到 python/pika 中的 RabbitMQ 服务器:

import pika
import logging

logging.basicConfig(level=logging.DEBUG)

credentials = pika.PlainCredentials('*******', '**********')
parameters = pika.ConnectionParameters(host='a-25c34e4d-a3eb-32de-abfg-l95d931afc72f.mq.us-west-1.amazonaws.com',
                                       port=5671,
                                       virtual_host='/',
                                       credentials=credentials,
                                       )

connection = pika.BlockingConnection(parameters)

当我运行上述代码时,我得到了pika.exceptions.IncompatibleProtocolError: StreamLostError: ("Stream connection lost: ConnectionResetError(54, 'Connection reset by peer')",)

【问题讨论】:

  • 您可以验证以下内容 1) 检查端口 5671 是否可访问(需要确保安全组得到妥善管理以实现此目的) 2) 版本检查(确保您使用的 python 库版本支持在 AWS 上运行的 rabbitmq 版本)

标签: amazon-web-services rabbitmq python-pika


【解决方案1】:

您正在尝试通过 AMQP 协议进行连接,而 AWS 正在使用 AMQPS,您应该像这样将 ssl_options 添加到您的连接参数中

import ssl

logging.basicConfig(level=logging.DEBUG)

credentials = pika.PlainCredentials('*******', '**********')
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
parameters = pika.ConnectionParameters(host='a-25c34e4d-a3eb-32de-abfg-l95d931afc72f.mq.us-west-1.amazonaws.com',
                                       port=5671,
                                       virtual_host='/',
                                       credentials=credentials,
                                       ssl_options=pika.SSLOptions(context)
                                       )

connection = pika.BlockingConnection(parameters)

【讨论】:

  • 这应该是公认的答案。帮助我解决了同样的问题。谢谢!