首页 > 解决方案 > 当订阅者应用程序关闭时,emqttd 未获取同一主题中的所有消息

问题描述

订阅者应用程序重新启动时仅接收最后保留的消息。

操作系统:Windows EMQ Broker 版本:2.3.10 Eclipse paho

当我在同一主题上发布 10 条消息时,在那段时间由于某种原因订阅者应用程序崩溃,在某个子应用程序重新启动后,我只得到最后一条保留消息并丢失所有其他数据,这是一个大问题。

我在 pub 和 sub 上都将 Retained 标志设置为 true ,将 clean session 标志设置为 false 并将 Qos 设置为 1。

有人可以帮忙吗?我是否缺少任何配置或 Erlang 代理的行为就像只获取最后一条保留消息。

标签: persistencemqttemq

解决方案


首先,MQTT 代理将仅保存发布到具有给定主题的保留标志的主题的最后一条消息。保留消息与离线客户端的高 QOS 消息排队无关。有关保留消息的更多详细信息,我建议您查看HiveMQ的这篇文章

至于为离线客户端排队消息,您需要满足以下所有要点。

  1. 清洁会话标志必须设置为false
  2. 客户端 ID 在连接之间必须保持不变
  3. 消息必须以 QOS > 0 发布
  4. 客户端必须订阅 QOS > 0 的主题

有关持久性和排队消息的更多详细信息,请查看其他HiveMQ 帖子。


推荐阅读