是否有将 QoS 1/2 消息持久保存到磁盘的 MQTT 代理?

物联网 MQTT
2021-06-16 23:37:16

截至目前,EMQ(Erlang MQTT Broker)似乎没有将 QoS 1/2 消息持久化到磁盘:EMQ 如何持久化 QoS 1/2 消息?

因此,在服务器意外重启的情况下,内存限制或其他事件消息可能会丢失,尽管 QoS 1/2 级别的消息必须至少或恰好一次传递。

是否有 MQTT 代理将 QoS 1/2 消息持久保存到磁盘从而确保交付?

3个回答

我认为Mosquitto将内存中的消息保存到磁盘。

坚持[真| false ] 如果为 true,则连接、订阅和消息数据将写入 mosquitto.db 中的磁盘中由 persistence_location 指定的位置。当 mosquitto 重新启动时,它会重新加载 mosquitto.db 中存储的信息。数据将在 mosquitto 关闭时写入磁盘,并且还会按照 autosave_interval 定义的定期间隔写入。也可以通过发送 mosquitto SIGUSR1 信号来强制写入持久性数据库。如果为 false,则数据将仅存储在内存中。默认为假。

VerneMQ是 MQTT 代理的一个示例,它保证在将接受的 QoS1/2 消息写入磁盘(使用 LevelDB)时交付它们。VerneMQ 在某种程度上类似于 EMQ,因为它也是开源的并且支持集群(尽管使用不同的技术)。完全公开,我是 VerneMQ 工程师。

HiveMQ似乎提供了各种选项来持久化会话数据,包括 QoS 1/2 消息。

这里列出持久性选项

  • 文件持久化
  • 内存持久性

默认情况下,HiveMQ 将使用文件持久性,它将所有数据保存到磁盘,以便随时检索。

为了保证broker重启之间数据的一致性,HiveMQ默认使用磁盘持久化。这意味着即使代理停止或崩溃,所有数据都将被保留,并且在重新启动后,代理可以继续其操作,就好像什么也没发生一样。