遗嘱消息

更新时间:

本文为您介绍MQTT特性遗嘱消息。

功能介绍

MQTT协议中,遗嘱消息(Will Message)是一种由客户端在连接时指定的,当客户端异常断开连接时由代理代为发布的消息。客户端在连接时会提供遗嘱消息的内容、主题、QoS 级别等信息,代理会在客户端连接时保存这条信息,如果客户端非正常断开(比如断电、网络故障等),代理会自动将遗嘱消息发布到指定的主题。

MQTT 5.0协议对遗嘱消息的功能进行了一些增强:

  • 遗嘱延迟间隔(Will Delay Interval):遗嘱消息现在可以包含一个延迟间隔的属性,即在会话过期前需要等待一段指定时间后才发布遗嘱消息。这给了客户端在遗嘱消息被发送前重新连接的机会,避免了不必要的遗嘱消息发布。

  • 内容类型(Content Type):遗嘱消息现在可以包含描述其有效荷载(Payload)内容的内容类型属性,使得消息的接受者能更好地理解消息的意图和如何处理。

  • 遗嘱消息属性:遗嘱消息可以带有自定义属性,例如消息过期间隔、遗嘱延迟间隔、请求响应等,增加了遗嘱消息的弹性和可描述性。

  • 响应主题(Response topic)和关联数据(Correlation Data):遗嘱消息也可以设置响应主题和关联数据。通过响应主题,可以说明遗嘱消息接收者要发布响应的目标主题。而关联数据则用于在原始请求和响应之间保持状态或关联上下文。

  • 负载格式说明(Payload Format Indicator):可以声明遗嘱消息的负载格式是已知的结构化数据(如JSONXML)还是不透明的字节流,允许接收者更好地理解和处理消息。

  • 用户属性(User Properties):遗嘱消息也可以携带用户属性,用于应用特定或业务相关的自定义消息。

MQTT的遗嘱消息在5.0版本中变得更加灵活和强大,让客户端和服务提供商能够为遗嘱消息定制更多的信息和行为,从而可以满足多样化的应用场景需求。

使用限制

目前仅专业版和铂金版支持该功能,且需要提交工单申请。

使用场景

  • 设备监控:在IoT应用中,如果设备的连接由于网络问题或设备故障而意外断开,遗嘱消息可以通知监控系统或其他设备,以便采取相应的措施,比如启动报警或尝试重新连接。

  • 被订阅者通知:在即时通讯应用中,当用户的连接意外断开时,可以使用遗嘱消息通知其他用户该用户离线。

  • 系统故障恢复:在分布式系统中,某个组件异常退出可能需要通知其他部分进行故障移交或重新路由请求。

  • 最后状态更新:在Home Automation系统中,智能设备可以在断开连接时发布遗嘱消息以更新其最后已知状态。

MQTT 5.0 的遗嘱消息提供了一种可靠的机制来处理客户端异常断开连接的情况,可以增强物联网应用的健壮性和可靠性。

消息示例

例如,有一个智能浇灌系统的传感器通过MQTT连接到控制服务器。在连接时,传感器设定了遗嘱消息,以便于如果传感器由于某种原因失去连接,比如断电或网络问题,遗嘱消息能够被发布。

// 传感器连接到MQTT代理,设定遗嘱消息
CONNECT
ClientId: sensor1
Will Topic: home/garden/sensor1/status
Will Message: disconnected
Will Delay Interval: 10 // 代理会在10秒后发布遗嘱消息
Session Expiry Interval: 60 // 会话过期时间设置为60秒
// 其他的CONNECT报文信息

如果传感器在没有发送DISCONNECT报文(正常断线)的情况下失去了连接,那么MQTT代理将在指定的延迟间隔之后发布以下遗嘱消息到遗嘱主题:

Topic: home/garden/sensor1/status
Payload: disconnected

这条遗嘱消息被其他已经订阅了该遗嘱主题(例如控制服务器)的客户端接收,用于通知它们传感器已经断开连接。这样,控制服务器可以采取相应的措施,如尝试重新建立连接、发送警报,或转移到备份传感器。