【问题标题】:IoT Edge SendEventBatchAsyncIoT Edge SendEventBatchAsync
【发布时间】:2018-12-04 13:51:58
【问题描述】:

我目前一直在试验 Azure IoT Edge,并试图降低向 IoT 中心发送大量遥测数据的成本。

起初我使用DeviceClientSendEventAsync() 方法来发送消息。现在我保存它们并将它们作为一个批次发送。

据我了解,这是为了降低 IoTHub 的吞吐量并降低将遥测数据发送到 IoT Hub 的成本。但是,当我查看 IoT Hub 时,无论是立即发送消息还是将它们保存并每 5 分钟批量发送一次,我仍然使用相同数量的消息。

我已经在网上搜索了一段时间,但我不知道我错过了什么。

我希望任何人都可以帮助我解决这个问题。

更多信息和我尝试过的事情: 我正在使用 C# 编写软件。我通过使用 AMQP 的透明网关使用 DeviceClient 发送消息。 我尝试过使用 MQTT 或 HTTP1 进行批处理,但两者都不起作用。 DeviceClient 甚至不支持 HTTP1。

【问题讨论】:

    标签: c# azure-iot-hub azure-iot-edge


    【解决方案1】:

    来自Azure Pricing page FAQs

    从设备发送到云的消息的最大消息大小为 256 KB。对于付费层,这些消息以 4 KB 块计量,因此例如,如果设备通过付费层发送 16 KB 消息,它将按 4 条消息计费。

    因此,就定价而言,您使用SendEventAsync() 还是SendEventBatchAsync() 似乎并不重要。

    此外,对于 IoT Edge:您的叶设备通过哪种协议连接到 Edge 集线器不会影响 Edge 集线器连接到 IoT 集线器的方式。默认情况下,它将使用 AMQP,但如果需要,您可以通过 UpstreamProtocol env variable 进行更改。

    正如下面在 cmets 中所讨论的:

    我的理解是每条消息 4KB 是最大值。此外,较小的消息将被计为每条消息。您可以做的是在内部批处理消息并将多个实际遥测消息放入一个 Microsoft.Azure.Devices.Client.Message。这些应该是 IoT 中心配额所依据的那些。您在这些负载的有效负载中执行的操作与配额无关

    【讨论】:

    • 我正在批量发送 150 条消息,每条消息大约 400 字节。这应该在 60KB 左右。但 IoTHub 仍然计算 150 条消息。而不是 15 岁左右。
    • 我的理解是每条消息4KB是最大的。此外,较小的消息将被计为每条消息。您可以做的是在内部批处理消息并将多个实际遥测消息放入一个Microsoft.Azure.Devices.Client.Message。这些应该是 IoT 中心配额所依据的那些。您在有效负载中进行批处理的操作与配额无关
    • 我已就此问题与 Microsoft 进行了联系。你描述的方式就是要走的路。我使用来自所有消息的数据增加了单个消息的有效负载,因此我只发送单个 big Microsoft.Azure.Devices.Client.Message 。这被视为单个消息。流分析无需额外工作即可正确查询。谢谢!
    • 很高兴我能帮上忙!我将该评论添加到解决方案中
    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多