在MQTT中,具有QoS 1或2的消息必须至少传递一次(必须完全传递QoS 2消息一次)。如果客户端未连接,则代理必须存储消息,直到客户端准备好接收它为止。

HiveMQ博客有一个有趣的地方:


但是,如果客户长时间不在线怎么办?存储消息的约束通常是操作系统的内存限制。在这种情况下,没有标准的方法可以做什么。这完全取决于用例。在HiveMQ中,我们将提供一种处理排队消息并将其清除的可能性。


既然这似乎取决于代理,那么Mosquitto如何处理这种情况?它只是在内存用完后崩溃还是最终清除了旧消息?

#1 楼

消息不仅保留在内存中,而且还保留在磁盘中。

查看消息何时写入磁盘的autosave_intervalautosave_on_change选项。

源代码