质子连接到azure iothub amqps端点

时间:2017-03-30 12:22:27

标签: azure amqp qpid azure-iot-hub

我试图在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,或者我是否错过了什么?

1 个答案:

答案 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