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

文章介绍了在物联网(IOT)场景中,使用MQTT协议时如何利用LWT(遗嘱消息)来处理设备掉线情况。LWT能在设备无预警下线时,通过预设的遗嘱消息通知服务器设备状态,确保系统能准确管理设备。同时,文章指出了可能遇到的问题,如遗嘱消息被普通保留消息覆盖,并提出了使用不同topic隔离消息以及设备上线后清除LWT消息的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 使用场景

由于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消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值