截至目前,EMQ(Erlang MQTT Broker)似乎没有将 QoS 1/2 消息持久化到磁盘:EMQ 如何持久化 QoS 1/2 消息?
因此,在服务器意外重启的情况下,内存限制或其他事件消息可能会丢失,尽管 QoS 1/2 级别的消息必须至少或恰好一次传递。
是否有 MQTT 代理将 QoS 1/2 消息持久保存到磁盘从而确保交付?
截至目前,EMQ(Erlang MQTT Broker)似乎没有将 QoS 1/2 消息持久化到磁盘:EMQ 如何持久化 QoS 1/2 消息?
因此,在服务器意外重启的情况下,内存限制或其他事件消息可能会丢失,尽管 QoS 1/2 级别的消息必须至少或恰好一次传递。
是否有 MQTT 代理将 QoS 1/2 消息持久保存到磁盘从而确保交付?
我认为Mosquitto将内存中的消息保存到磁盘。
坚持[真| false ] 如果为 true,则连接、订阅和消息数据将写入 mosquitto.db 中的磁盘中由 persistence_location 指定的位置。当 mosquitto 重新启动时,它会重新加载 mosquitto.db 中存储的信息。数据将在 mosquitto 关闭时写入磁盘,并且还会按照 autosave_interval 定义的定期间隔写入。也可以通过发送 mosquitto SIGUSR1 信号来强制写入持久性数据库。如果为 false,则数据将仅存储在内存中。默认为假。
VerneMQ是 MQTT 代理的一个示例,它保证在将接受的 QoS1/2 消息写入磁盘(使用 LevelDB)时交付它们。VerneMQ 在某种程度上类似于 EMQ,因为它也是开源的并且支持集群(尽管使用不同的技术)。完全公开,我是 VerneMQ 工程师。