我目前一直在试验Azure IoT Edge,并试图使其更便宜以向IoT中心发送大量遥测。
起初,我使用DeviceClient
和方法SendEventAsync()
发送消息。现在,我将它们保存并作为一个批次发送。
根据我的理解,实现此目的是为了减少IoTHub的吞吐量,并使将遥测发送到IoT中心的成本降低。但是,当我查看IoT中心时,无论是立即发送还是每次保存并每5分钟批量发送一次,我仍然使用相同数量的消息。
我已经在网上搜索了一段时间,但我不知道自己缺少什么。
我希望任何人都可以帮助我解决这个问题。
更多信息和我尝试过的事情: 我正在使用C#编写软件。我正在通过使用AMQP的透明网关使用DeviceClient发送消息。 我尝试使用MQTT或HTTP1进行批处理,但两者均无法正常工作。 DeviceClient甚至不支持HTTP1。
答案 0 :(得分:1)
从设备发送到云的消息的最大消息大小为256 KB。这些消息按付费层的4 KB块计量,因此,例如,如果设备通过付费层发送16 KB消息,则将其计为4条消息。
因此,就定价而言,使用SendEventAsync()
还是SendEventBatchAsync()
似乎并不重要。
此外,当涉及到IoT Edge时:您的叶子设备通过哪种协议连接到Edge Hub不会影响Edge Hub如何连接到IoT Hub。默认情况下,它将使用AMQP,但您可以根据需要通过UpstreamProtocol
env variable进行更改。
如以下注释中所述:
我的理解是每封邮件最大4KB。同样,较小的消息也将被计为1条消息。您可以做的是在内部批处理消息,然后将多个实际遥测消息放入一个Microsoft.Azure.Devices.Client.Message中。这些应该是IoT中心配额所反对的。在配额的有效负载内进行批处理的操作与配额无关