Proton 连接到 azure iot hub amqp 端点
Proton connection to azure iothub amqps endpoints
我正在尝试在 google 云上的 Debian 4.8.4-1 上使用 python 2.7 qpid 质子 (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()
我收到以下错误
(debug print of connection string being passed) 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
Traceback (most recent call last): File "readProton2.py", line 27,
in
messenger.subscribe("%s%s" % ( base, entityName)) File "/usr/lib/python2.7/dist-packages/proton/__init__.py", line 496, in
subscribe
self._check(pn_error_code(pn_messenger_error(self._mng))) File "/usr/lib/python2.7/dist-packages/proton/__init__.py", line 300, in
_check
raise exc("[%s]: %s" % (err, 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): Servname not
supported for ai_socktype
最后的错误消息看起来像是连接字符串的解析被破坏了(快速看一下,qpid-proton/messenger.c 中的 pni_default_rewrite 似乎使用第一次出现的 @ 来拆分可能是问题的连接字符串)
但是,我是 AMQP 和 proton 的新手,所以在我提出错误之前,想检查一下其他人是否已经成功地使用 proton 到 iothub,或者我是否遗漏了什么??
您需要对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
我正在尝试在 google 云上的 Debian 4.8.4-1 上使用 python 2.7 qpid 质子 (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()
我收到以下错误
(debug print of connection string being passed) 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
Traceback (most recent call last): File "readProton2.py", line 27, in messenger.subscribe("%s%s" % ( base, entityName)) File "/usr/lib/python2.7/dist-packages/proton/__init__.py", line 496, in subscribe self._check(pn_error_code(pn_messenger_error(self._mng))) File "/usr/lib/python2.7/dist-packages/proton/__init__.py", line 300, in _check raise exc("[%s]: %s" % (err, 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): Servname not supported for ai_socktype
最后的错误消息看起来像是连接字符串的解析被破坏了(快速看一下,qpid-proton/messenger.c 中的 pni_default_rewrite 似乎使用第一次出现的 @ 来拆分可能是问题的连接字符串)
但是,我是 AMQP 和 proton 的新手,所以在我提出错误之前,想检查一下其他人是否已经成功地使用 proton 到 iothub,或者我是否遗漏了什么??
您需要对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