📜  MQTT的基本功能|套装3

📅  最后修改于: 2021-08-27 05:17:46             🧑  作者: Mango

先决条件–

  • 消息队列遥测传输协议(MQTT)
  • MQTT的基本功能|套装1
  • MQTT的基本功能|套装2

最后遗嘱:
在MQTT中,发布者客户端将有关特定主题的消息发布到Broker。然后,代理将这些消息发布给订阅该主题的客户端。如果发布者/订阅者客户端要终止与代理的连接,则发送DISCONNECT消息。这样,可以正常断开通信。

但是在几种情况下,客户端可能会突然断开连接。在这种情况下,客户端无需发送DISCONNECT消息即可结束与代理的通信。在这种情况下,其他客户端将不会收到有关失败的通知,因此它们将继续等待来自断开连接的客户端的消息。

客户可能由于以下任何原因而突然断开连接–

  • 由于连接丢失或硬件故障而导致基础网络故障。
  • 在保持有效期内未发送消息。

为了解决这种问题,使用了最后遗留消息的概念。使用此功能,客户端在首次连接到代理时会提供预定义的遗嘱消息。此消息由代理存储。

  • 如果客户端突然断开连接,则代理将为所有订阅的客户端在意愿主题上发布意愿消息。
  • 如果客户端正常断开连接,则代理将丢弃遗嘱消息。

LWT消息和LWT主题:

  • LWT消息定义要发布的消息,作为最终将发布给订阅的客户端的消息。
  • LWT主题定义了将在其上发布消息的最后一个主题。

图–最后遗嘱
例子 –

图–蚊子遗嘱和遗嘱插图
在上图中,主题将为“传感器/状态”,消息将为“离线”。一旦客户端突然断开连接,套接字错误将显示在蚊子中介程序终端上。因此,代理然后将将消息“脱机”发送给订阅了主题“传感器/状态”的客户端。

蚊子命令:

  • 最后遗嘱主题(强制性)–
    如果未提供其他参数,则仅发布最后一个主题将向订阅的客户端发布具有QoS0的非保留零长度消息。
    --will-topic
  • 最后遗嘱消息(可选)–
    默认为零长度的空消息。
    --will-payload
  • 最后一次QoS(可选)–
    默认为QoS0。
    --will-qos
  • 最后遗留(可选)–
    默认值保留为false。
    --will-retain