监视设备连接状态
Azure IoT 中心支持多种监视设备状态的方法。 本文介绍了不同的监视方法,并提供指导来帮助你为 IoT 解决方案选择最佳选项。
下表介绍了监视设备连接状态的三种方法:
方法 | 状态频率 | Cost | 构建工作量 |
---|---|---|---|
设备孪生 connectionState 属性 | 间歇性 | 低 | 低 |
事件网格 | 60 秒 | 低 | 低 |
自定义设备检测信号模式 | 自定义 | 高 | 高 |
由于其可靠性、低成本和易用性,建议将事件网格作为大多数客户的首选监视解决方案。
然而,使用事件网格进行监视有一定的局限性,可能会使其不适合某些 IoT 解决方案。 通过本文了解每种选项的优点和局限性。
设备孪生 connectionState
每个 IoT 中心设备标识都包含一个名为 connectionState 的属性,该属性报告“已连接”或“已断开连接”。 此属性表示 IoT 中心对设备连接状态的理解。
连接状态属性有几个限制:
- 仅使用 MQTT 或 AMQP 的设备才更新连接状态。
- 此属性的更新依赖于协议级别的 ping,可能会延迟至多 5 分钟。
出于这些原因,建议仅在开发和调试期间使用 connectionState 字段。 IoT 解决方案不应在运行时查询字段。 例如,不要在发送云到设备的消息或 SMS 之前查询 connectionState 字段以检查设备是否已连接。
事件网格
建议将事件网格作为大多数客户的首选监视解决方案。
订阅事件网格上的 deviceConnected 和 deviceDisconnected 事件以获取警报并监视设备连接状态。
使用以下文章了解如何在 IoT 解决方案中集成设备已连接和已断开连接的事件:
设备连接状态事件适用于使用 MQTT 或 AMQP 协议进行连接的设备,或者通过 WebSocket 使用这些协议之一进行连接的设备。 仅使用 HTTPS 发出的请求不会触发设备连接状态通知。
- 对于使用适用于 Java、Node 或 Python 的 Azure IoT SDK 连接的设备:
- MQTT:自动发送连接状态事件。
- AMQP:应创建云到设备链接以减少报告连接状态的延迟。
- 对于使用适用于 .NET 或 C 的 Azure IoT SDK 连接的设备,在发送初始设备到云消息或接收到云到设备消息之前,不会报告连接状态事件。
在 Azure IoT SDK 之外,在 MQTT 中,这些操作相当于对相应的消息主题的 SUBSCRIBE 或 PUBLISH 操作。 通过 AMQP,这些操作相当于在相应的链接路径上附加或传输消息。
事件网格限制
使用事件网格监视设备状态存在以下限制:
- 事件网格不会报告每个单独的设备连接和断开连接事件。 相反,它会每 60 秒轮询一次设备状态,并在状态发生更改时发布最新的连接状态。 因此,如果 60 秒的时段内发生了多个事件,状态更改报告可能会延迟最多一分钟,而单个状态更改可能不会报告。
- 使用 AMQP 的设备需要云到设备链接才能报告设备状态。
- 事件网格公开无法隐藏的公共终结点。
如果上述任何限制影响到你使用事件网格进行设备状态监视的能力,则应考虑改为构建自定义设备检测信号模式。
设备检测信号模式
如果你需要了解设备的连接状态,但事件网格对于你的解决方案而言过于局限,你可以实现检测信号模式。 在检测信号模式下,设备每隔固定时间至少发送一次设备到云的消息(例如,每小时至少一次)。 即使设备没有任何要发送的数据,仍会发送空的设备到云消息(通常具有可将其识别为检测信号消息的属性)。 在服务端,该解决方案维护着与每个设备收到的最后一个检测信号的映射。 如果解决方案未在预计时间内从设备收到检测信号消息,则它假定设备存在问题。
设备检测信号限制
由于检测信号消息是作为设备到云消息实现的,因此它们会占用 IoT 中心消息配额和限制。
较短的到期时间模式
如果 IoT 解决方案只使用连接状态来决定是否向设备发送云到设备的消息,并且没有把消息广播到大量设备,则可以考虑使用较短的到期时间模式这种更简单的方法来替代检测信号模式。 较短的到期时间模式这种方法通过发送具有较短消息到期时间的消息并从设备请求消息确认来决定是否发送云到设备的消息。
有关详细信息,请参阅消息过期(生存时间)。
其他监视选项
更复杂的实现可包含来自 Azure Monitor 和 Azure 资源运行状况的信息,用于识别尝试进行连接或通信但失败的设备。 Azure Monitor 仪表板有助于查看设备的总体运行状况,而事件网格和检测信号模式可更轻松地响应单个设备中断。
若要详细了解如何通过 IoT 中心使用这些服务,请参阅监视 IoT 中心和检查 IoT 中心资源运行状况。 有关使用 Azure Monitor 或事件网格监视设备连接的更具体信息,请参阅监视、诊断和排查设备连接问题。