质子连接到azure iothub amqps端点
我正在尝试使用谷歌云上Debian 4.8.4-1上的python 2.7 qpid proton(0.17.0)连接Azure IoT中心上的服务AMQPS 1.0端点 我正在为SASL平原使用共享访问策略和SAS令牌对(在C#下的ampq net lite中成功工作)。对于azure iothub,您引用共享访问策略作为格式中的用户名policyName@sas.root.IoTHubName 当我将这些(模糊的)凭证与qpid一起使用时,如下所示质子连接到azure iothub amqps端点,azure,amqp,qpid,azure-iot-hub,Azure,Amqp,Qpid,Azure Iot Hub,我正在尝试使用谷歌云上Debian 4.8.4-1上的python 2.7 qpid proton(0.17.0)连接Azure IoT中心上的服务AMQPS 1.0端点 我正在为SASL平原使用共享访问策略和SAS令牌对(在C#下的ampq net lite中成功工作)。对于azure iothub,您引用共享访问策略作为格式中的用户名policyName@sas.root.IoTHubName 当我将这些(模糊的)凭证与qpid一起使用时,如下所示 import sys from proto
import sys
from proton import Messenger, Message
base = "amqps://iothubowner@sas.root.HubName:SharedAccessSignature sr=HubName.azure-devices.net%2fmessages&sig=PERCENT_ENCODED_SIG&se=1493454429&st=1490861529&skn=iothubowner@HubName.azure-devices.net:5671"
entityName = "/messages/servicebound/feedback"
messenger = Messenger()
messenger.subscribe("%s%s" % ( base, entityName))
messenger.start()
我得到以下错误
(正在传递的连接字符串的调试打印)amqps://iothubowner@sas.root.HubName:SharedAccessSignature
sr=HubName.azure devices.net%2Messages&sig=PERCENT_ENCODED_sig&se=1493454429&st=1490861529&skn=iothubowner@HubName.azure-devices.net:5671
回溯(最后一次调用):文件“readProton2.py”,第27行,
在里面
messenger.subscribe(“%s%s”%(base,entityName))文件/usr/lib/python2.7/dist packages/proton/__init__.py),第496行,在
订阅
self._check(pn_error_code(pn_messenger_error(self._mng)))文件“/usr/lib/python2.7/dist packages/proton/_uuuinit_uuu.py”,第300行,in
_检查
raise exc(“[%s]:%s”%(错误,pn\u错误文本(pn\u messenger\u错误(self.\u mng)))
proton.Messenger异常:[-2]:连接错误
(sas.root.HubName:SharedAccessSignature
sr=HubName.azure devices.net%2Messages&sig=PERCENT_ENCODED_sig&se=1493454429&st=1490861529&skn=iothubowner@HubName.azure-设备(网址:5671):
getaddrinfo(sas.root.HubName,SharedAccessSignature
sr=HubName.azure devices.net%2Messages&sig=PERCENT_ENCODED_sig&se=1493454429&st=149086152
9&skn=iothubowner@HubName.azure-devices.net:5671):Servname不是
支持ai_socktype
最后一条错误消息看起来连接字符串的解析被破坏了(快速查看,qpid proton/messenger.c中的pni_default_rewrite似乎使用第一次出现的@来拆分连接字符串,这可能是问题所在)
然而,我对AMQP和质子还不熟悉,所以在我提出错误之前,我想检查其他人是否已成功使用质子到iothub,或者我是否遗漏了什么???您需要对AMQP用户名和密码进行编码。 iothubowner@sas.root.HubName
iothubowner%40sas.root.HubName
SharedAccessSignature sr=HubName.azure devices.net%2Messages&sig=PERCENT_ENCODED_sig&se=1493454429&st=1490861529&skn=IoTubOwner
SharedAccessSignature%20sr%3DHubName.azure-devices.net%252fmessages%26sig%3DPERCENT_ENCODED_SIG%26se%3D1493454429%26st%3D1490861529%26skn%3Diothubowner
服务器名称应为
HubName.azure devices.net:5671
,但正如您在错误消息中看到的,服务器名称更改为sas.root.HubName,SharedAccessSignature sr=HubName.azure devices.net%2Messages&sig=PERCENT_ENCODED_sig&se=1493454429&st=149086152 9&skn=iothubowner@HubName.azure-devices.net:5671
您需要对amqp用户名和密码进行编码。
iothubowner@sas.root.HubName
iothubowner%40sas.root.HubName
SharedAccessSignature sr=HubName.azure devices.net%2Messages&sig=PERCENT_ENCODED_sig&se=1493454429&st=1490861529&skn=IoTubOwner
SharedAccessSignature%20sr%3DHubName.azure-devices.net%252fmessages%26sig%3DPERCENT_ENCODED_SIG%26se%3D1493454429%26st%3D1490861529%26skn%3Diothubowner
服务器名称应为
HubName.azure devices.net:5671
,但正如您在错误消息中看到的,服务器名称更改为sas.root.HubName,SharedAccessSignature sr=HubName.azure devices.net%2Messages&sig=PERCENT_ENCODED_sig&se=1493454429&st=149086152 9&skn=iothubowner@HubName.azure-devices.net:5671
您是否忘记了变量base
的双引号,例如:base=”amqps://...“?没有-他们只是在写问题时迷失了方向,你遵循了哪个教程?”?你查过了吗?注意地址格式。您是否忘记了变量base
的双引号,例如:base=”amqps://...“?没有-他们只是在写问题时迷失了方向,你遵循了哪个教程?”?你查过了吗?注意地址格式。这也适用于eventhubs吗?使用什么编码方法?这方面的MSFT文档在哪里?谢谢-最终在其他人尝试做类似事情的经历中找到了对此的评论这对eventhubs也适用吗?使用什么编码方法?这方面的MSFT文档在哪里?谢谢-最终在其他人尝试做类似事情的经历中找到了对此的评论