【发布时间】:2020-12-02 23:19:15
【问题描述】:
受Azure IoT PCS Remote Monitoring repository 的启发,我开始开发自己的基于 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 Hub endpoints 同步所有孪生更改。然后,我不会直接查询 IoT Hub,而是查询 CosmosDb/SQL。我不知道这种方法是否有用。
【问题讨论】:
-
为什么不订阅事件而不是手动查询呢?这是要求吗?我相信 ModuleClient 具有 SetDesiredPropertyUpdateCallbackAsync ,您可以在其中传递回调来处理新报告的数据
-
我提到的 API 由我的前端使用并用于呈现 UI。例如,/api/devices 端点返回 IoT Hub 上的设备列表,然后用于在我的前端呈现表。
-
我明白了,在那种情况下,我不认为它是为此目的而设计的。中间可能需要一个中介或中间件来规避限制。
标签: c# azure azure-iot-hub azure-iot-edge