1

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

在此处输入图像描述

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

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

4

2 回答 2

1

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

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 值”、“数据”或“AMQP 序列”类型。如果消息正文的类型为“AMQP 值”,我发现 Microsoft 库不喜欢它。如果它是“AMQP 值”,更新的 Microsoft 库 Azure.Messaging.EventHubs v5.0.1 甚至不会解析正文数据。它始终在消息正文中显示 0 个字节。通过确保 qpid-proton 创建的消息正文使用二进制“数据”类型,我能够解决此问题。我没有在 Python 中尝试过,但这是 C++ 代码的样子。

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

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

于 2020-04-24T21:38:51.553 回答
-1

我试图通过使用 qpid-proton 发送消息并使用 EventProcessorHost 接收消息来复制您的问题,但我失败了。但是,我认为这似乎是由 Python 字符编码引起的,例如 Python2 中使用 Unicode 格式的代码message.body = u"This is a text string"。请参考https://msdn.microsoft.com/en-us/library/azure/jj841070.aspx在 Python 中使用 qpid-proton。

根据我的经验,我建议您使用 Azure SDK for Python 的服务总线/EventHubs API 或使用 EventHub REST API 发送消息。对于 EventHubs 来说,这是一种简单而稳定的方式。关于 EventHub 消息发送 REST API,请参考https://msdn.microsoft.com/en-us/library/dn790664.aspx

到目前为止,在 C# 中使用 EventProcessorHost API 是从 EventHubs 接收消息的最有效方式,无需担心字符编码的问题。

此致。

于 2015-09-30T06:41:52.413 回答