我肯定缺少有关整个MQTT协议(protocol)如何工作的信息,因为我无法掌握《最后遗嘱》消息的使用模式:它们的目的是什么?
我经常看到的一个例子是通知设备已脱机。对我来说,这没有多大意义,因为很明显,如果设备未发布任何数据,则它可能处于脱机状态,或者可能存在一些网络问题。

那么,LWT的一些实际用法是什么?它是干什么的?

最佳答案

LWT消息并不真正关心检测客户端是否已脱机(该任务由keepAlive消息处理)。
LWT消息是关于的信息,客户端脱机后会发生什么

这个比喻是真实的最后遗嘱:
如果一个人去世,她可以制定遗嘱,在该遗嘱中声明去世后应采取的行动。遗嘱执行人会留意这些愿望,并代她执行。
MQTT世界中的类比是,客户可以制定一个遗嘱,在该遗嘱中,当客户端脱机后,它将声明由代理代表发送什么消息。

一个虚构的示例:

我有一个传感器,可以发送重要数据,但是很少发送。
它以[topic:'/ node / gone-offline',message:':id']的形式制定了最后的遗嘱声明,其中:id是传感器的唯一ID。我还有一个紧急订阅者,主题为“节点/脱机”,每次在该 channel 上发布消息时,都会向我的手机发送一条SMS。

在正常运行期间,传感器将通过发送定期的keepAlive消息,并在传感器的实际读数中穿插,以保持与MQTT-经纪人的连接打开。如果传感器脱机,则由于缺少keepAlives,与代理的连接将超时。

这就是LWT的来历:如果未指定LWT,则代理将不在乎,仅关闭连接。但是,在我们的情况下,代理将执行传感器的最后遗嘱并发布LWT消息“/ node / gone-offline::id”。然后,该消息将被消耗给我的紧急用户,并且将通过SMS通知我传感器的ID,以便我可以检查发生了什么。

简而言之:

不仅可以在客户端脱机后仅关闭连接,还可以利用LWT消息来定义要由代理代表客户端发布的消息,因为客户端脱机并且无法再发布。

10-02 04:39