如果 Mosquitto 用完内存来存储 QoS 1/2 消息会发生什么?

物联网 MQTT 蚊子
2021-06-06 01:34:02

在MQTT,具有QoS 1或2的消息必须至少被递送一次质量(QoS 2级的消息必须被递送恰好一次)。如果客户端未连接,则代理必须存储消息,直到客户端准备好接收它。

HiveMQ博客有一个有趣的观点:

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

既然这似乎依赖于broker,那么Mosquitto是如何处理这种情况的呢?它是在内存不足后崩溃还是最终清除了旧消息?

1个回答

消息被持久化到磁盘,而不仅仅是保存在内存中。

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

来源