c# - IoT Edge SendEventBatchAsync

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

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

起初,我使用 DeviceClient 和方法 SendEventAsync() 发送消息。现在我正在保存它们并将它们作为一个批处理发送。

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

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

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

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

最佳答案

来自 Azure Pricing page FAQs :

The maximum message size for messages sent from a device to the cloud is 256 KB. These messages are metered in 4 KB blocks for the paid tiers so for instance if the device sends a 16 KB message via the paid tiers it will be billed as 4 messages.

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

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

正如下面评论中所讨论的:

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

关于c# - IoT Edge SendEventBatchAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53614474/

相关文章:

c# - 让页面读取从另一个页面发布到它的值的最佳方法是什么?

java - 使用 TPM 连接到 Azure Iot Hub

Azure物联网边缘: Edge Agent can't add X509 certificate to the store

node.js - Azure IOT 集线器设备 "Suspension"

azure - 在没有互联工厂解决方案加速器的情况下使用 Azure IoT Edge 和 OPC UA

Azure IoT Edge 和证书

c# - 如何将对象列表发送到 webapi c#?

javascript - 在 highcharts 中显示 .Net Core Web API 响应

c# - 当调用方法已经拥有同一对象上的锁时,尝试获取该对象上的锁

c# - 获取从 IoT 中心触发的 Azure 函数中的设备 ID 和负载