MQTT LWT(遗嘱消息)消息的使用

文章目录

  • 一 使用场景
  • 二 IOT协议选择
  • 三 LWT(遗嘱消息) 消息使用
    • 3.1 LWT(遗嘱消息) 消息的作用
    • 3.2 LWT(遗嘱消息)的标志位
  • 四 可能遇到的问题

一 使用场景

由于IOT设备会出现掉线的情况,所以应该在通讯过程中,采用一个消息,告诉服务端,设备已经下线了。这样方便设备的统一和管理。

二 IOT协议选择

采用了目前很通用的IOT通讯消息机制,MQTT。在MQTT协议中,可以通过设置LWT消息。当设备下线的时候,会发送一个消息告诉后台,设备已经下线。

三 LWT(遗嘱消息) 消息使用

3.1 LWT(遗嘱消息) 消息的作用

Broker 检测到底层的 I/O 异常;
Client 未能在 Keep Alive 的间隔内和 Broker 之间有消息交互;
Client 在关闭底层 TCP 连接前没有发送 DISCONNECT 数据包;
Broker 因为协议错误关闭和 Client 的连接,比如 Client 发送了一个格式错误的 MQTT 数据包

在这个情况,broker会受到一个LWT消息,方便后台其他服务的使用和管理。

3.2 LWT(遗嘱消息)的标志位

Will Flag:是1否0使用 LWT
Will Topic:遗嘱主题名,不可使用通配符(在 CONNECT报文中的 有效载荷 中 设置)
Will Qos:发布遗嘱消息时使用的 QoS 等级,如果遗嘱标志(Will Flag)被设置为0,遗嘱QoS也必须设置为0(0x00)
Will Retain:遗嘱消息的 Retain 标识
Will Message:遗嘱消息内容(在 CONNECT报文中的 有效载荷 中 设置)

topic 可以和普通消息使用相同的topic

四 可能遇到的问题

  1. 在使用过程中,如果普通的消息也设置了retained消息,会导致LWT消息被retained消息覆盖。因此在使用的时候需要注意。避免普通消息覆盖LWT消息。这个情况解决的一个简单办法就是使用不同的topic将上下线消息与普通通讯消息进行隔离。
  2. 在设备重新上线后,应该需要将LWT消息进行清除。否则可能出现这样一个情况:其他客户端链接Broker的时候,即使设备重新上线,新链接上的客户端也会受到LWT消息,认为设备下线。会引起设备混乱。

解决办法:在LWT的topic上,发送一条空指令,告知broker不在对新链接上来的客户端推送LWT消息。

你可能感兴趣的:(IOT,step,by,step,物联网,MQTT,IOT)