2019-07-13-mqtt-mosquitto系列14之保留消息retain

Posted 小肥的胖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019-07-13-mqtt-mosquitto系列14之保留消息retain相关的知识,希望对你有一定的参考价值。

mqtt

保留消息retain

通常,如果发布者向主题发布消息时,没有客户端订阅该主题,则该消息将被broker直接丢弃。但是,发布者可以通过设置保留消息标志来告诉代理保留该主题的最后一条消息。如在paho.mqtt.c库中的MQTTClient_publish()接口中设置retained=1。

LIBMQTT_API int MQTTClient_publish(MQTTClient handle, const char* topicName, int payloadlen, const void* payload, int qos, int retained, MQTTClient_deliveryToken* dt);

这在某些场景下这可能非常有用,比如,

  • 在工业场景中,我们通常可能需要保存最新的温度,最新的湿度等等,这些只需要保存最新的那条即可。
  • 在一些采集频率较低场景中,比如5分钟采集一次,如果你没有自己做保存,而直接连接mosquitto服务器来查看状态,由于没有保存消息,不得不等到状态再次上报,如果有保留消息,那么一连上就能看到最后一次上报的数据了。
mydevice/status/temperature
mydevice/status/humidity

重要的是要理解

  • 每个主题只保留一条保留消息
  • 在该主题上发布的下一条消息将替换该主题的最后一条保留消息。
  • 服务端的保留消息不是会话状态的组成部分,服务端应该保留那种消息直到客户端删除它(客户端发送一条设置了保留位的空消息即可删除保留消息)。

以上是关于2019-07-13-mqtt-mosquitto系列14之保留消息retain的主要内容,如果未能解决你的问题,请参考以下文章

2019-07-13-mqtt-mosquitto系列14之保留消息retain