在MQTT中,具有QoS 1或2的消息必须至少传递一次(必须完全传递QoS 2消息一次)。如果客户端未连接,则代理必须存储该消息,直到客户端准备好接收它为止。
那么EMQ如何将QoS 1/2消息持久化直到传递,即重新启动代理还是关于内存限制?
#1 楼
那么EMQ如何在发送之前一直保持QoS 1/2消息,即代理重新启动或关于内存限制?
答案似乎是:它没有没错他们的错误跟踪器上的此问题说:
我面临代理重新启动后存储持久客户端会话的问题。代理中当前不存在此功能,或者我缺少一些配置吗?
代理将不会保留会话。问题,我发现此报告:
最初,我在emqttd.config中将最大客户端设置为1000K。我们的机器有8 GB内存和4核,我能够轻松地连接120K并发连接,但是当内存超过8 GB时,emqttd会自行终止。我认为为每台计算机设置一个最大客户端会更好。
基本上,从v2.0.5开始:
消息不
一旦代理耗尽内存,它就会崩溃。
并不完全理想,但这似乎是当前的行为,因此如果持久存储消息对您的用例至关重要,请使用其他代理。
评论
对于大规模可扩展的mqtt经纪人来说,似乎很奇怪(至少可以说)。
–加纳马
17年1月15日在20:07
如果您正在寻找确实将QoS1 / 2消息持久化到磁盘(使用LevelDB)的分布式MQTT代理,则可以看看VerneMQ(vernemq.com)。
–拉尔斯·海瑟·克里斯滕森(Lars Hesel Christensen)
17年1月18日在11:21
嗯,尽管emqtt本身并不存储消息,但是它可以连接到许多数据库,因此我假设它就是这样做的。你检查了吗?
–法比恩·帕普鲁(Fabien Papleux)
17年12月24日在11:33
评论
相关:iot.stackexchange.com/q/809/54