EMQ(Erlang MQTT代理)是一个“分布式,可大规模扩展,高度可扩展的MQTT消息代理”,报告的消息为“ 130万个并发MQTT连接”,因此,它可能允许大量客户端进行发布和订阅。似乎在某些给定时间可能会断开某些客户端的连接。询问有关蚊子的信息:


在MQTT中,具有QoS 1或2的消息必须至少传递一次(必须完全传递QoS 2消息一次)。如果客户端未连接,则代理必须存储该消息,直到客户端准备好接收它为止。


那么EMQ如何将QoS 1/2消息持久化直到传递,即重新启动代理还是关于内存限制?

评论

相关:iot.stackexchange.com/q/809/54

#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