EMQ如何保持QoS 1/2消息?


10

EMQ(二郎MQTT代理)是一个“分布式的,可大规模扩展的,高度可扩展的MQTT消息代理”有报道的“130万个并发连接MQTT” -所以它潜在地允许大量客户端的发布和订阅。似乎某些客户端可能在任何给定时间断开连接。

作为这个问题,如果Mosquitto的内存不足以存储QoS 1/2消息会发生什么?询问蚊子:

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

那么,EMQ如何在发送之前一直保持QoS 1/2消息,即重新启动代理或关于内存限制?


Answers:


6

那么,EMQ如何在发送之前一直保持QoS 1/2消息,即重新启动代理或关于内存限制?

答案似乎是:。他们的错误跟踪器上的此问题表明:

我面临在代理重新启动后存储持久客户端会话的问题。代理中当前不存在此功能吗?或者我缺少某些配置?

代理将不保留会话。

另外,在研究了更多问题之后,我发现了此报告

最初,我在emqttd.config中将最大客户端数设置为1000K。我们的机器有8 GB内存和4核,我能够轻松地连接120K并发连接,但是当内存超过8 GB时,emqttd会自行终止。我认为为每台计算机设置一个最大客户端会更好。

从v2.0.5开始,基本上:

  • 邮件似乎没有保留到文件中。
  • 一旦代理用尽了内存,它将简单地崩溃。

并非完全理想,但这似乎是当前的行为,因此,如果持久化消息对您的用例至关重要,请使用其他代理。


1
对于大规模可扩展的mqtt经纪人来说,似乎很奇怪(至少可以这样说)。
加纳玛'17

如果您正在寻找确实将QoS1 / 2消息持久化到磁盘(使用LevelDB)的分布式MQTT代理,那么可以看看VerneMQ(vernemq.com)。
Lars Hesel Christensen

嗯,尽管emqtt本身并不存储消息,但是它可以连接到许多数据库,所以我假设这就是它的作用。你检查了吗?
法比恩·帕普鲁
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.