我正在尝试使用
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
。
通过阅读问题和后来的评论,我猜测远程端点支持 AMQP 1.0,而 Pika 客户端似乎仅支持 0.9.1 草案 AMQP 规范,这将使返回的错误变得合理。您需要使用能够使用 ISO 规范 AMQP 1.0 标准的客户端
我也有同样的问题;我只是使用
pika.urlParameter
来强制 SSL 连接:
url_string = "amqps://" + username + ":" + password + "@" + host + ":" + str(port) + "/" + vhost
url_parameter = pika.URLParameters(url_string)
connection = pika.BlockingConnection(url_parameter)