[英]Persistent device connection status over MQTT with JWT, using GCP IoT Core
我有一些设备通过 MQTT 生成数据发送到 GCP IoT 核心。 我想监控设备当前是否与 MQTT 代理连接或断开连接。 这已经在 SO 的其他地方得到了回答,这是我目前使用的方法:监控 Stackdriver 日志中的 CONNECT/DISCONNECT 消息并将它们发布到单独的 Pub/Sub 主题。 然后由 Firebase Function 阅读此主题以更新我的设备在线/离线字段。
这在理论上可行,但由于 JWT 过期字段,每次令牌过期时我都被迫重新连接我的设备,从而导致大量虚假的在线/离线触发器。 有没有办法在保持连接的同时刷新令牌? 还是一种更好的方法来简单地监控设备的连接性?
我可能可以使用 heartbeat 事件,并且仅在 N 分钟内未收到任何 heartbeat 或什至定期向设备发送某种 ping 命令时才考虑设备处于脱机状态。 虽然,很高兴知道设备当前是否已连接。
对于纯粹的 MQTT 解决方案,我已经在做的事情以及 Orlandog 的建议是正确的,但并没有解决每次刷新 JWT 令牌时接收 DISCONNECT/CONNECT 消息的潜在问题。 这就是协议应该如何工作的方式。
我最终得到的是在我的设备上使用balena.io ,它在 balena OS 上运行 docker 容器和我的应用程序,并且操作系统本身通过 VPN 连接。 因此,无论我的应用程序的 MQTT state 是什么,我都可以使用 balena API 在线监控设备 state。 然后使用 firebase 云 function 轮询此 API。
总结一下:
Balena 最多可免费使用 10 台设备,它们支持多种硬件。
我认为您通过 Stackdriver 日志记录和 PubSub 实现监控设备的方式是最合适的。
同时,关于 JWT 令牌的过期问题,我建议您验证此文档,它提供了几个如何刷新令牌从而防止设备断开连接的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.