异常断开时的代办
客户端在建连时可以把一条消息登记为遗嘱:当代理检测到连接异常中断,例如保活超时、网络断开或被服务端因协议错误断开时,代理代替客户端把这条消息发布出去。客户端主动正常断开不会触发遗嘱。这让平台在设备突然失联时仍能收到一条明确的离线通知。
登记要素
| 主题 | 通常与设备状态主题同前缀,例如设备状态或离线事件主题 |
|---|---|
| 载荷 | 建议包含设备标识、离线标记与登记时间 |
| QoS | 与状态主题保持一致,避免等级不匹配导致弱化 |
| 保留标志 | 置保留可让新订阅者立即看到离线状态,需与清理策略配套 |
| 5.0 遗嘱延迟 | 可设定延迟发布,避免设备快速重连造成的状态抖动 |
触发与不触发
| 情形 | 是否发布遗嘱 | 说明 |
|---|---|---|
| 保活超时 | 是 | 代理在约 1.5 倍保活时间未收到报文后判定连接失效 |
| 网络中断 | 是 | 代理侧最终按保活超时判定 |
| 协议错误被断开 | 是 | 服务端主动断开且非正常断开流程时按遗嘱处理 |
| 客户端正常断开 | 否 | 主动发送断开报文时遗嘱不发布 |
| 设备断电 | 是 | 表现为保活超时,与网络中断无法区分 |
典型使用场景
- 设备离线告警:平台靠遗嘱在几十秒内得到离线事件,而不依赖轮询
- 监控画面状态刷新:在线状态主题配合保留消息,新订阅者立即看到当前状态
- 运维工单触发:离线事件直接进入告警流水线,缩短响应时间
- 灰度排查:临时调整遗嘱载荷增加诊断信息,定位批量掉线原因
5.0 的遗嘱延迟可以把因短暂网络抖动导致的离线发布推迟,减少状态在短短几秒内反复变化造成的告警噪声。
遗嘱无法区分设备断电、网络中断与心跳超时,全部表现为异常断开;判定严重程度时要结合最后一次数据上报时间一起看。