MQTT with JAVA—使用QoS1发布某些数据时,我会丢失一些数据

MQTT with JAVA—使用QoS1发布某些数据时,我会丢失一些数据,java,mqtt,mosquitto,paho,Java,Mqtt,Mosquitto,Paho,我正在从事我的MQTT项目,我是这方面的初学者。我想发布一些具有所有QoS级别的数据,订阅它们并进行时间测量。我使用一个Raspberry pi作为订阅者,并且在同一个Raspberry pi中使用Mosquitto代理。我用自己的笔记本电脑发布数据。我希望当我发布和订阅Qos为0的数据时,我会丢失一些数据,但我的订户收到了所有数据。顺便说一下,我发布了1000万个随机值,其中有8个并行线程,没有任何thread.sleep()。以下是我的发布者代码的一部分: final String temp

我正在从事我的MQTT项目,我是这方面的初学者。我想发布一些具有所有QoS级别的数据,订阅它们并进行时间测量。我使用一个Raspberry pi作为订阅者,并且在同一个Raspberry pi中使用Mosquitto代理。我用自己的笔记本电脑发布数据。我希望当我发布和订阅Qos为0的数据时,我会丢失一些数据,但我的订户收到了所有数据。顺便说一下,我发布了1000万个随机值,其中有8个并行线程,没有任何
thread.sleep()
。以下是我的发布者代码的一部分:

final String temperature = tempratureNumber + "°C"; //temperatureNumber is random value.
byte[] payload = temperature.getBytes();  
tempratureBadroomTopic.publish(payload,1,true);

//And these are my connect options:
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false);
options.setWill(client.getTopic("home/LWT"), "I'm gone :(".getBytes(), 1, false);
options.setMaxInflight(32768); // for too many publishes error.
client.connect(options);
这些也是我的用户代码的一部分:

final String topic1 = "home/brightness1/bathroom";
mqttClient.subscribe(topic1,1);
此外,我还期望,当我发布带有QoS1的200k随机值时,这将花费更多的时间,但我将收到至少200k个随机值,因为QoS级别可能超过200k。但是,有时我收到的值少于200k,例如199780。我不明白为什么我会丢失数据。 我遇到这些情况的原因是什么?
祝您愉快。

我看到了由MOSQUITO设置引起的类似情况
max_queued_messages
;这默认为100,之后消息将被自动删除。您也在QOS1订阅吗?@Brits谢谢!我正在尝试这个。我做了5次测试,在qos为1时,他们都收到了7条以上的消息,顺便说一句,我发布了200k条消息。我会继续做测试,但有些事情让我困惑。为什么subcriber总是收到7条以上的消息?@hardillb是的,我收到了。我想是的:)上面有关于it@HarunÖzdemir很抱歉,您没有提供足够的信息来启用响应(例如,您将
max_queued_messages
设置为什么)。涉及到许多组件(发布者、代理、订阅者),问题可能存在于其中任何一个组件中(包括代码中)。获得答案的最佳方法是发布一个日志(但您可能希望启用代理上的日志记录,并首先检查它报告的任何错误)。