我目前一直在尝试 Azure IoT Edge,并尝试降低向 IoT 中心发送大量遥测数据的成本。
起初,我使用 DeviceClient
和方法 SendEventAsync()
发送消息。现在我正在保存它们并将它们作为一个批处理发送。
据我了解,这样做是为了减少 IoTHub 的吞吐量,并降低向 IoT Hub 发送遥测数据的成本。但是,当我查看 IoT 中心时,无论是立即发送还是保存它们并每 5 分钟批量发送,我仍然使用相同数量的消息。
我已经在网上搜索了一段时间,但我不知道我错过了什么。
我希望任何人都可以帮助我解决这个问题。
一些更多信息和我尝试过的事情: 我正在使用 C# 来编写该软件。我正在使用 AMQP 通过透明网关使用 DeviceClient 发送消息。 我尝试过使用 MQTT 或 HTTP1 进行批处理,但两者都不起作用。 DeviceClient 甚至不支持 HTTP1。
最佳答案
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/