截至目前,EMQ(Erlang MQTT代理)似乎尚未将QoS 1/2消息持久保存到磁盘:EMQ如何将QoS 1/2消息持久保存到磁盘?内存限制,或者尽管必须至少或完全传递一次QoS 1/2级消息,否则其他事件消息可能会丢失。

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

评论

看看iot.stackexchange.com/questions/784/…

#1 楼

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


持久性[true | false]
如果为true,则将连接,预订和消息数据写入mosquitto.db中的磁盘,该磁盘位于persistence_location所指定的位置。 mosquitto重新启动后,它将重新加载mosquitto.db中存储的信息。当蚊子关闭时,数据也会以autosave_interval定义的定期间隔写入磁盘。也可以通过将蚊子发送到SIGUSR1信号来强制写入持久性数据库。如果为false,则数据将仅存储在内存中。默认为false。


#2 楼

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

评论


附带问题:你们是否提供公共VerneMQ经纪人进行测试和评估?

–罗斯
17年1月18日在8:54

@Ross,您好,我们有一个公共实例在public.vernemq.com:1883上运行,但是您无法在该实例上进行负载测试,因为它在小型虚拟机上运行-因此,不要指望它具有很高的性能。 。它还对源自单个IP的并发连接数有限制。如果您希望可以与我们联系,我们很乐意看看我们是否可以支持您的用例。您可以通过vernemq dot com在info上给我们写信,或在此处填写联系表:vernemq.com/services.html

–拉尔斯·海瑟·克里斯滕森(Lars Hesel Christensen)
17年1月18日在9:03



谢谢,我不需要进行负载测试,只需检查我可以连接到其他代理,看看是否存在任何兼容性问题。

–罗斯
17年1月18日在9:07

这让我想起,公共版本相对较旧-我将看看是否无法将其升级到今天的最新版本。

–拉尔斯·海瑟·克里斯滕森(Lars Hesel Christensen)
17年1月18日在9:11

#3 楼

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

持久性选项在此处列出:


文件持久性
内存持久性

默认情况下,HiveMQ将使用文件持久性,该功能将所有数据保存到磁盘,以便可以随时对其进行检索。 />为了保证代理重新启动之间的数据一致性,HiveMQ默认使用磁盘持久性。这意味着即使代理停止或崩溃,所有数据也将被保留,并且在重新启动后,代理可以继续其操作,就好像什么都没有发生一样。