📜  MQTT的基本功能|套装2

📅  最后修改于: 2021-08-25 10:17:40             🧑  作者: Mango

先决条件–

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

保留的消息:
在MQTT中,当客户端将消息发布到代理时,默认情况下,retain标志为false 。在这种情况下,代理仅将消息传递到预期的订阅的客户端,然后丢弃该消息。但是,如果订阅的客户端当前处于脱机状态,则该客户端将永远不会收到该消息,因为该消息已被代理丢弃。

为了解决这个问题,使用了保留标志。代理将保留保留标记为true的发布消息。因此,即使订户客户端处于脱机状态,这些消息也将被存储并在到达联机状态后传递给预期的客户端。

对于特定主题,代理将仅存储一条保留的消息。因此,如果在同一主题上发布了另一条消息,且保留标记为true,则先前的消息将被新的消息替换。这样做是为了使客户可以轻松获得最后的已知值。

启用和禁用保留消息:
要启用此功能,可以与发布的消息一起设置保留标志。但是,不能通过将标志设置回false来禁用保留的消息。客户端需要在同一主题上发送一个空消息,并将retain标志设为true,以禁用此功能。空消息不会干扰对该主题进行的任何其他通信,因此有助于有效禁用该功能。

例子 –
在下面的示例中,传感器将其当前值发布到代理,同时保留的消息为true。联机的客户端立即收到此消息。由于保留标志为true,因此代理将存储消息,并在其联机后将其传递给第二个客户端。因此,由于此功能,即使脱机客户端联机后,它也使用最新的传感器值进行更新。

图–保留的消息

在下图中,两个消息发布完成后,客户端将联机。因此,它仅接收保留标记为true的已发布消息。

图–蚊帐保留邮件插图

好处 :

  • 当脱机客户端联机时,立即向它们提供最新状态更新。
  • 如果未在该主题上发布任何新值,则一旦客户上线,将为他们提供最新的已知值。因此,即使系统中没有新活动,他们也将知道系统的当前状态。