首页 > 解决方案 > 处理频繁的设备双读和节流

问题描述

Azure IoT PCS 远程监控存储库的启发,我开始在自己的基于 Azure IoT Hub 的 IoT 系统上工作。

与 IoT PCS 存储库类似,我有一个 API 端点 (/api/devices),它返回我的 IoT 中心上的设备列表 - 当客户端发出请求时,我使用 Microsoft.Azure.Devices SDK 和 RegistryManager 创建查询并返回设备孪生的列表。这个 API 端点在我的前端 SPA 应用程序中使用和使用。

var result = await registryManager
                .CreateQuery("SELECT * FROM devices", 100)
                .GetNextAsTwinAsync(options);

这很好用,但是我发现如果您过于频繁地运行此查询,您会很快遇到 throttling。我使用的是 S1 层,如果我理解正确,我可以每分钟最多进行 20 个 Twin 查询。假设我的系统和客户群增长,这并不能很好地扩展。即使在更高的层次上,规模也不是那么高。

问题是——你希望如何处理这个限制?

到目前为止,我最好的想法是将 IoT 中心设备 (Twin) 数据复制到 CosmosDB/SQL Server 并使用IoT 中心端点同步所有孪生更改。然后,我不会直接查询 IoT Hub,而是查询 CosmosDb/SQL。我不知道这种方法是否有用。

标签: c#azureazure-iot-hubazure-iot-edge

解决方案


我可以确认订阅双更改并复制所需的并报告给经常读取的数据库是一个可行的解决方案。

管道如下所示:IoT Hub ->Message routing:Endpoint ->Consumer ->To Db ->Fast unlimited reads。


推荐阅读