python - 使用 Azure EventHostProcessor 接收器时从事件中心收到的垃圾值

标签 python azure qpid azure-eventhub

我正在使用 Qpid-Proton-0.10(Python) - 基于 AMQP 1.0 的消息传递库,将数据发送到 Azure 事件中心。为了接收数据,我按照以下指南使用 EventProcessorHost:https://azure.microsoft.com/en-in/documentation/articles/event-hubs-csharp-ephcs-getstarted/#receive-messages-with-eventprocessorhost 。当通过它接收数据时,我看到在数据之前附加了两个垃圾值:

enter image description here

使用Qpid-Proton 的recv.py接收相同字符时,我没有看到此类字符。有人遇到同样的问题吗?

P.S:我还使用Azure Python SDK将数据发送到Azure事件中心,并使用Qpid-Proton的EventProcessorHost和recv.py接收数据,并且没有遇到这样的问题。只是因为 Azure SDK 不包含任何接收事件的方法,所以我必须切换到 Qpid-Proton 库。

最佳答案

我使用 qpid-proton v0.29 for C++ 编写 Microsoft 事件中心生产者应用程序和 Microsoft.Azure.EventHubs v4.2 编写 Microsoft 事件中心使用者时遇到了同样的问题。消息正文开头的第一个“垃圾”字节是 AMQP“嵌入式构造函数”,它指定后面字节的格式。在您的屏幕截图中,正文格式看起来像是一个字符串,例如“ Hello World ”。在这种情况下,“嵌入构造函数”是 0xA1,这表明接下来的字节是 ASCII,并且它们的数量是可变的。第二个“垃圾”字节是 ASCII 字符串中的字节数。对于“hello world”,这将是 11。我不确定为什么 Microsoft 库不为您解析它。有关 AMQP 数据类型和消息格式的更多信息,请参阅以下内容:

AMQP 数据类型:http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#section-types

AMQP消息格式:http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#section-message-format

AMQP 规范规定消息正文可以是“AMQP Value”、“Data”或“AMQP Sequence”类型。我发现 Microsoft 库不喜欢消息正文的类型为“AMQP Value”。较新的 Microsoft 库 Azure.Messaging.EventHubs v5.0.1 甚至不会解析正文数据(如果它是“AMQP 值”)。消息正文中始终显示 0 字节。我能够通过确保 qpid-proton 创建的消息正文使用二进制“数据”类型来解决该问题。我还没有在 Python 中尝试过,但 C++ 代码如下。

proton::message msg;
std::string bodyString = "Hello World!";
proton::binary bodyBinary(bodyString.begin(), bodyString.end());
msg.body(bodyBinary);

在 Python 中,我会尝试确保消息正文具有“字节”数据类型,并查看是否有效。

关于python - 使用 Azure EventHostProcessor 接收器时从事件中心收到的垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32743499/

相关文章:

python - 当我尝试使用 Paffy 获取 YouTube 播放列表的视频链接时出现错误

python - 抓取动态网站

azure - Blob 存储和单独 SAS 策略中可以拥有的容器数量是否有限制

java - apache qpid 与 spring boot 的集成

python - 遍历 Django 模板中的一个列表

python - 在 Python 中指定项目分隔符

c# - 在 Windows Azure 上托管的项目上调用查询时,TFS Api 崩溃

azure - MSGraph 单点登录的最佳身份验证流程

c++ - 在 qpid cpp 客户端中接收传入消息时发生异常

c++ - 在 C++ 中使用 dlopen 的 undefined reference 错误