我试图在Google云端的Debian 4.8.4-1上使用python 2.7 qpid proton(0.17.0)来连接Azure IoT中心上的服务 AMQPS 1.0端点
我使用SASL PLAIN的共享访问策略和SAS令牌对(在C#下成功使用ampq net lite)。对于azure iothub,您以 policyName@sas.root.IoTHubName
格式引用共享访问策略作为用户名当我使用qpid质子的这些(模糊的)凭证时如下
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%2fmessages&安培; 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",line 496,in 订阅 self._check(pn_error_code(pn_messenger_error(self._mng)))文件" /usr/lib/python2.7/dist-packages/proton / __ init __。py",第300行,in _校验 提出exc(" [%s]:%s"%(错误,pn_error_text(pn_messenger_error(self._mng))))
proton.MessengerException:[ - 2]:CONNECTION ERROR (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): getaddrinfo(sas.root.HubName,SharedAccessSignature SR = HubName.azure-devices.net%2fmessages&安培; SIG = PERCENT_ENCODED_SIG&安培; SE = 1493454429&安培; ST = 149086152 9& skn = iothubowner @HubName.azure-devices.net:5671):服务名称不是 支持ai_socktype
最后的错误消息看起来像连接字符串的解析正在被破坏(很快看,qpid-proton / messenger.c中的pni_default_rewrite似乎使用@的第一次出现来拆分连接字符串,这可能是问题)
然而,我是AMQP和质子的新手,所以在我提出错误之前,想检查一下其他人是否已成功使用质子到iothub,或者我是否错过了什么?
答案 0 :(得分:0)
您需要对amqp用户名和密码进行编码。
iothubowner@sas.root.HubName
iothubowner%40sas.root.HubName
SharedAccessSignature sr = HubName.azure-devices.net%2fmessages& sig = PERCENT_ENCODED_SIG& se = 1493454429& st = 1490861529& skn = iothubowner
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%2fmessages&sig=PERCENT_ENCODED_SIG&se=1493454429&st=149086152 9&skn=iothubowner@HubName.azure-devices.net:5671