python-3.x - 使用 AMQP 从 Azure Eventhub 接收事件

标签 python-3.x azure amqp azure-eventhub

目标:使用 python 从 EventHub 接收消息。

设置:

  • Python 3.5
  • AMQP 1.0
  • 在新门户中创建的 EventHub。
  • Ubuntu 16.04 和 Mac OS X。
  • 质子==0.8.8和python-qpid-proton==0.17.0

这几天我一直在尝试通过 AMQP 连接到 Azure EventHub。我可以使用 Java 客户端来完成此操作(作为确保 EventHub 正常工作的测试),但我需要能够使用 Python 来完成此操作。

在网上阅读了几个示例后,我在过去的几天里尝试了很多东西。 我正在使用 RootManageSharedAccessKey生成的 key 没有任何 /为我。我已经尝试过urllib.quote和正常一样。

目前我的字符串如下所示:

amqps://RootManageSharedAccessKey:<primary key>@<namespace>.servicebus.windows.net/<internal hub name>

如果我将这些相同的参数复制到 Java 客户端中,它就可以正常工作。如果我使用 python SDK 发送它也可以正常工作(它通过 HTTPS 发送)。我尝试过使用 amqpsamqp如果我打开 AMQP 的调试参数,我会收到错误:

condition=:"amqp:unauthorized-access",
description="Unauthorized access. 'Send' claim(s) are required to perform this operation.
Resource: 'sb://<namespace>.servicebus.windows.net/<internal event hub>

这听起来是一个权限问题,但相同的 key 和一切在 Java 和 Python 中通过 HTTPS 运行得很好,所以它必须是我的代码与 key 中的某些东西。也许我没有正确编码它们(我读过你不需要对它们进行编码)?一旦我让它工作起来,我就会为其他人制作一个 GIST 和更新。

我当前的发送代码如下,应该更容易:

from proton import Messenger, Message

messenger = Messenger()
message = Message()
key = "key"
message.address = "amqps://RootManageSharedAccessKey:"+key+"@<namespace>.servicebus.windows.net/<hubname>"

message.body = u"This is a text string"
messenger.put(message)
messenger.send()`

我尝试过的事情:

  1. 在事件中心和命名空间上分别制定发送和接收策略。
  2. 重新创建中心
  3. 安全与不安全
  4. 将端口添加到防火墙
  5. Python 2.7 proton 与 3.5
  6. Linux 与 Mac
  7. 主键与辅助键
  8. 新命名空间
  9. 有或没有的新 key /在 key 中
  10. URL 编码部分和整个字符串
  11. UTF-8 编码
  12. JSON 消息与文本消息。

最佳答案

这对于您的项目来说可能为时已晚,但是这里有一个用于 Python 的新 AMQP 1.0 库正在开发中:

http://github.com/Azure/azure-uamqp-python

尽管它仍处于早期阶段(尚未准备好生产),但存储库中提供了一些可与 Azure 事件中心一起使用的示例:

https://github.com/Azure/azure-uamqp-python/tree/master/samples

关于您在使用 Proton 时看到的错误 - 这看起来可能是尝试使用错误的身份验证机制。您是否尝试过使用 Event Hubs Python SDK ?他们正在使用 some settings here这可能会让人感兴趣

关于python-3.x - 使用 AMQP 从 Azure Eventhub 接收事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43104229/

相关文章:

python-3.x - 使用 spacy 进行 POS 模式挖掘

python-3.x - 如何评估路径中的双星号(星号)?

azure - 更新azure中QueueTrigger函数应用程序的函数运行时版本

azure - 无法通过 Powershell 创建资源组

c# - Azure:将凭据传递给需要错误类型的 ComputeManagementClient 构造函数

python - 模拟帝国时代 3 中的按键

python - 将 RowNumber 添加到 Dict 列表

java - Azure EventHub 上的 Qpid 接收器

IBM MQ 的 .Net AMQP 客户端

java - 如何在 Qpid 中设置安全提供程序以允许匿名以及名称/密码身份验证?