MQTT协议的遗嘱消息,用于在设备离线时向其他设备告知其已离线。如果设备异常断开且在一段时间内未重连,物联网平台会代为发送遗嘱消息。遗嘱消息在MQTT 3.1.1标准中已定义,阿里云物联网平台在MQTT 5.0接入时支持这个特性。本文为您介绍遗嘱消息的概念、交互过程及使用场景。
背景信息
遗嘱消息
设备建连时会携带遗嘱消息,如果设备异常断开连接并且遗嘱延时间隔(默认为0)内设备未重联,该遗嘱消息会由物联网平台代理发布给订阅者。
遗嘱消息内容:消息内容与设备正常发布消息内容基本相同,包括话题,载体,服务等级(Qos),保留标记(retain)、用户属性、消息过期等。
异常断开的场景:
网络故障或波动,设备在保持连接周期内未能通讯,连接被服务端关闭。
设备意外掉电,服务端识别到网络断开。
设备尝试进行不被允许的操作而被服务端关闭连接,例如订阅自身权限以外的主题等。
删除遗嘱消息:
设备正常断开连接后会被删除。
设备异常断开后,物联网平台代理发布会被删除。
遗嘱消息如有设置消息过期时间,消息过期后会被删除。
遗嘱消息不支持更新。
会话过期不影响遗嘱消息,遗嘱消息的发布与会话无关。
遗嘱消息支持消息过期,如果消息内容一段时间后失效例如温度控制,请结合消息过期特性一起使用。更多信息,请参见消息过期。
如果网络信息较弱或不稳定,建议设置遗嘱过期时间间隔
WillDelayInterval
,避免设备频繁上下线而导致遗嘱消息频繁被推送。
使用场景
设备异常分析
物联网设备接入物联网平台,当设备状态发生变化如设备上线、设备下线时,物联网平台会向业务服务器或规则引擎推送设备状态消息topic: /as/mqtt/status/${productKey}/${deviceName}
,该消息中只包含设备的连接状态信息。如果想获得更多数据用于设备异常分析,可以使用遗嘱消息,遗嘱消息可包含环境信息等设备的详细状态。