我有一个 Azure IoTHub,注册了数千台设备。这些设备通过电信提供商进行通信,电信提供商通过 Azure 存储队列发送消息。此存储队列触发一个 Azure 函数,该函数需要解析消息并将事件发送到 IoTHub,如下所示。
目前,我们使用 Azure IoTHub SDK 为每个负载创建一个 DeviceClient 并发送事件。由于 DeviceClient 代表 IoTHub 中的设备并携带事件源的上下文,因此我们必须为每个事件重新创建一个设备客户端。这很快就超过了 Azure Functions 上允许的连接数阈值。
我们已尝试使用 Azure Functions 的 IoTHub 输出绑定(bind),但无法正常工作,而且我认为这不会起作用,因为我们需要确保事件以正确的上下文到达 IoTHub(发送消息)通过正确的设备)。
解决这个问题的正确方法是什么? IoTHub 的连接可以重复使用吗?我们应该放弃 Azure Function 而选择其他东西吗?
最佳答案
我假设 Telco 是某种自定义设备管理解决方案(供应商锁定解决方案),它还可以与设备通信并接收设备遥测数据,并最终将其转发到指定端点,对吗?
如果我可以问一下,如果我的假设是正确的,如果您不通过 IoT 中心管理电信设备(图表上的箭头仅朝一个方向),为什么需要将事件传递到 IoT 中心?
如果将 IoT 中心用作本质上云到云通信的消息代理,那么如果这是唯一目的,那么这并没有什么好处。从概念上讲,您所描述的是云到云通信,而 IoT 中心旨在用于设备。
这就是我要做的。 Setup API 管理(或 http 触发的 Azure 功能)作为 Telco 的前门,并将消息传递到事件中心。 您可以在此处选择传递请求正文,例如您的遥测数据所在的位置 - 我再次假设。
保留 IoT 中心,并设置到之前创建的事件中心的路由。
现在,如果您的设备未由供应商锁定并且可以直接与 IoT 中心通信,则消息将重新路由到事件中心。此外,电信设备消息将被路由到完全相同的事件中心。
现在,您可以使用 Azure 流分析来分析来自事件中心的数据流,以及电信设备和潜在的非电信设备的数据流。
关于azure - 将设备到云消息发送到 IoTHub 时,是否可以重用 Azure Functions 上的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58247973/