我肯定错过了关于整个MQTT协议如何工作的一些东西,因为我无法掌握最后遗嘱信息的使用模式:他们的目的是什么?
我经常看到的一个例子是告知设备已脱机.它对我来说没有多大意义,因为很明显,如果设备没有发布任何数据,它可能会脱机,或者可能存在一些网络问题.
那么,LWT的一些实际应用是什么?它的发明是什么?
小智 70
LWT消息并不关心检测客户端是否已脱机(该任务由keepAlive消息处理).LWT消息是关于客户端脱机后发生的事情.
类比是一个真正的遗嘱:如果一个人去世,她可以制定一个遗嘱,她宣布在她去世后应该采取什么行动.遗嘱执行人将听取这些意愿并代表她执行.MQTT世界中的类比是客户可以制定一个证明,其中它声明了代理在离线后代表它应该发送的消息.
一个虚构的例子:
我有一个传感器,它发送关键数据,但很少发送.它以[topic:'/ node/gone-offline',message:':id']的形式制定了最后一个声明,其中:id是传感器的唯一ID.我还有一个针对"节点/离线"主题的紧急订阅者,每次在该频道上发布消息时,都会向我的手机发送短信.
在正常操作期间,传感器将通过发送定期的keepAlive消息来保持与MQTT-broker的连接打开,这些消息散布在实际的传感器读数中.如果传感器脱机,由于缺少keepAlive,与代理的连接将超时.
这是LWT的用武之地:如果没有指定LWT,代理不关心并且只是关闭连接.然而,在我们的例子中,代理将执行传感器的最后遗嘱并发布LWT消息'/ node/gone-offline :: id'.然后该消息将被消费给我的紧急用户,我将通过短信通知传感器的ID,以便我可以查看正在发生的事情.
简而言之:
客户端脱机后,不仅可以关闭连接,还可以利用LWT消息来定义代理客户端发布的消息,因为客户端处于脱机状态且无法再发布.
har*_*llb 10
仅仅因为设备未发布并不意味着它不在线或存在网络问题.
例如,一个传感器监视一个只会很少变化的值,好的设计表明传感器应该只发布变化以帮助减少带宽使用,因为定期发布相同的值是浪费.如果该值作为保留值发布,则任何新订户将始终获取当前值,而无需等待传感器值更改并再次发布.
在这种情况下,LWT用于在传感器发生故障(或存在网络问题)时发布,因此我们在客户端保持活动时间很快就知道问题.
有关Last-Will-and-Testament消息的深入文章可在MQTT Essentials博客文章系列中找到:http://www.hivemq.com/mqtt-essentials-part-9-last-will-and-testament/ .
总结博客文章:
该遗嘱功能在MQTT用于通知其他客户关于非正常断开连接的客户端.
MQTT常用于场景不可靠的网络很常见.因此,假设某些客户端会不时地断开连接,因为它们丢失了连接,电池是空的或任何其他可以想象的情况.最好知道连接的客户端是否已正常断开连接(这意味着使用MQTT DISCONNECT消息),以便采取适当的措施.
| 归档时间: |
|
| 查看次数: |
18851 次 |
| 最近记录: |