Java 如何避免Mqtt中出现过多的发布错误?

Java 如何避免Mqtt中出现过多的发布错误?,java,protocols,mqtt,Java,Protocols,Mqtt,我们使用mqtt协议通过java应用程序发布消息。 此应用程序正在通过RPI计算机运行,处理速度和ram有限。 在mqtt上,我们每20秒发布一条状态消息 此消息已正确发布数小时,但随后它开始一次发布4个状态消息,有时会在发布过程中出现错误。 如果有人能解释为什么会出现这种多重出版,以及我们如何避免这种情况,那将是很有帮助的 感谢您收到此消息是因为在低内存环境下在MQTT上进行连续发布,配备512 Mb RAM的RPi(Raspberry Pi)可能会导致此问题。 一种解决方案是将此发布的服务质

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


感谢

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

MqttMessage message = new MqttMessage();
message.setQos(0);
....
设置QoS 0不会确认传输的消息,因此节省内存。有关QoS的更多信息,请查看以下链接


祝你好运

请提供更多信息:您正在使用哪个java库?您可以发布您正在使用的代码吗?我们正在使用mqttv3 paho库,但很抱歉,由于安全策略的原因,无法上载代码。您在RPI上使用的是JVM吗?新的Java8是一个alpha版本,可能会有奇怪的行为。内存不足可能解释了错误消息,但我只会将发布设置为QoS 0,如果您的PI通过可靠连接(例如通过电缆)连接。否则,您将失去MQTT的优势。这完全取决于您的特定用例。正如Chritian所说,将QoS设置为0在这里不是一个好的解决方案-您牺牲了消息的可靠性,而在应用程序中应该进行适当的内存管理。很遗憾,这个答案被接受了。这只是一条状态信息,所以质量不是问题