Pika Amqps 连接:连接尝试已完成,AMQPConnectorAMQPHandshakeError:不兼容协议错误

问题描述 投票:0回答:2

我正在尝试使用

pika
连接到 AMQPS 服务(我没有配置访问权限或获取证书的方法)。

这是代码:

import pika
from urllib.parse import urlparse
import ssl

credentials = pika.PlainCredentials(username, password)

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.verify_mode = ssl.CERT_NONE
ssl_options=pika.SSLOptions(context)

params = pika.ConnectionParameters(
    host=url.hostname, 
    port=url.port, 
    credentials=credentials, 
    ssl_options=ssl_options
)
connection = pika.BlockingConnection(params)
channel = connection.channel() # start a channel

每次我尝试执行此操作时,都会失败:

ERROR:pika.adapters.utils.connection_workflow:AMQPConnector - reporting failure: 
AMQPConnectorAMQPHandshakeError: 
IncompatibleProtocolError: The protocol returned by the server is not supported: 
('StreamLostError: 
("Stream connection lost: SSLEOFError(8, \'EOF occurred in violation of protocol (_ssl.c:2633)\')",)',)

不幸的是,我不知道服务器返回的是哪个协议。

qpid-proton
sasl_enabled: True
选项集一起使用,可以正常工作。

from proton import Message
from proton.utils import BlockingConnection

conn = BlockingConnection(
    url,
    password=password,
    user=username,
    sasl_enabled=True,
)

但是,我还没有找到方法来做到这一点

pika

python ssl amqp pika python-pika
2个回答
1
投票

通过阅读问题和后来的评论,我猜测远程端点支持 AMQP 1.0,而 Pika 客户端似乎仅支持 0.9.1 草案 AMQP 规范,这将使返回的错误变得合理。您需要使用能够使用 ISO 规范 AMQP 1.0 标准的客户端


0
投票

我也有同样的问题;我只是使用

pika.urlParameter
来强制 SSL 连接:

url_string = "amqps://" + username + ":" + password + "@" + host + ":" + str(port) + "/" + vhost
url_parameter = pika.URLParameters(url_string)
connection =  pika.BlockingConnection(url_parameter)
© www.soinside.com 2019 - 2024. All rights reserved.