EMQ 如何持久化 QoS 1/2 消息?

物联网 MQTT emq
2021-06-07 01:05:45

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

作为这个问题如果 Mosquitto 用完内存来存储 QoS 1/2 消息会发生什么?询问有关蚊子的问题:

在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 开始:

  • 消息似乎没有保存到文件中。
  • 一旦代理耗尽内存,它就会崩溃。

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