【问题标题】:how to avoid too many publishes error in Mqtt?如何避免 Mqtt 中出现过多的发布错误?
【发布时间】:2014-01-10 05:26:57
【问题描述】:

我们正在使用 mqtt 协议通过 java 应用程序发布消息。 此应用程序正在通过具有有限处理速度和内存的 RPI 计算机运行。 在 mqtt 上,我们每 20 秒发布一条状态消息 此消息已正确发布几个小时,但随后它开始一次发布 4 条状态消息,有时会出现错误太多正在发布的错误。 如果有人能解释为什么会发生这种多次发布以及我们如何避免这种情况会有所帮助?

谢谢

【问题讨论】:

  • 请提供更多信息:您使用的是哪个 java 库?您可以发布您正在使用的代码吗?
  • 我们正在使用 mqttv3 paho 库,但由于安全策略无法上传代码
  • 您在 RPI 上使用的是哪个 JVM?新的 Java8 是一个 alpha 版本,可能会有奇怪的行为。

标签: java protocols mqtt


【解决方案1】:

您收到此消息是由于在低内存环境下在 MQTT 上持续发布,配备 512 Mb RAM 的 RPi (Raspberry Pi) 可能会导致此问题。 一种解决方案是将此发布的服务质量 QoS 设置为 0(零)。这可以使用方法来实现

MqttMessage message = new MqttMessage();
message.setQos(0);
....

设置 QoS 0 不会确认传输的消息,因此可以节省内存。有关 QoS 的更多信息,请查看以下链接http://www.eclipse.org/paho/files/mqttdoc/Cclient/qos.html

祝你好运……

【讨论】:

  • 小内存可能解释了错误消息,但我只会将发布设置为 QoS 0,如果您的 PI 通过可靠连接(例如通过电缆)连接。否则,您将失去 MQTT 的优势。这完全取决于您的具体用例。
  • 正如 Chritian 所说,在这里将 QoS 设置为 0 并不是一个好的解决方案 - 您会牺牲消息的可靠性来换取应用程序中的正确内存管理。很遗憾这个答案已被接受。
  • 这只是一个状态消息,所以质量不是问题
猜你喜欢
  • 2021-03-24
  • 1970-01-01
  • 2020-07-13
  • 2016-11-14
  • 2020-03-15
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
相关资源
最近更新 更多