Mosquitto代理-Java Pato mqtt客户机发布方法被卡住

Mosquitto代理-Java Pato mqtt客户机发布方法被卡住,mqtt,publish-subscribe,mosquitto,Mqtt,Publish Subscribe,Mosquitto,我有一个使用mqtt发布/订阅技术进行物联网的项目。经过研究,我决定使用Mosquitto和Paho mqtt 我使用默认配置由MOSQUITO设置mqtt代理。我尝试编写代码连接到mqtt代理,然后每2分钟发布一次消息以从设备检索数据。我的项目运行良好已有一段时间,但不知何故在发布阶段遇到了困难 我遇到的第一个问题是MqttException:有太多正在进行的发布,然后我通过设置setMaxInflight找到了解决方法。我设置为1000,问题就解决了 在那之后,我面临另一个问题。在客户端代码

我有一个使用mqtt发布/订阅技术进行物联网的项目。经过研究,我决定使用Mosquitto和Paho mqtt

我使用默认配置由MOSQUITO设置mqtt代理。我尝试编写代码连接到mqtt代理,然后每2分钟发布一次消息以从设备检索数据。我的项目运行良好已有一段时间,但不知何故在发布阶段遇到了困难

我遇到的第一个问题是
MqttException:有太多正在进行的发布
,然后我通过设置
setMaxInflight
找到了解决方法。我设置为1000,问题就解决了

在那之后,我面临另一个问题。在客户端代码运行了几个小时之后,publish方法被卡住了,再也没有返回,然后我的代码就不能像我预期的那样工作了。我不知道为什么发布没有返回,但文件说

Delivers a message to the server at the requested quality of service and returns control once the message has been delivered.
我是mqtt新手,因此我认为mqtt代理没有发回ack,或者mqtt代理没有任何问题。在那之后,我寻找了一种方法来取消一段时间后,我发现了这个

mqttClient.setTimeToWait(20000);
我尝试过,它在20秒后抛出超时异常,正如我预期的那样,但在运行了几个小时后,我又恢复了旧问题
MqttException:正在进行的发布太多了
。 我认为,
setTimeToWait(20000)
只是在飞行过程中抛出异常而没有取消,所以它达到了1000,我在飞行中设置了MaxInflight

我想我们必须弄清楚发布被卡住的原因或者取消的方法。有人能帮忙解决这个问题吗?这是我当前的代码

this.mqttClient = new MqttClient(
  MqttConfiguration.END_POINT,
  MqttConfiguration.CLIENT_ID
);
this.mqttClient.setCallback(this);
this.mqttClient.setTimeToWait(20000);

MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
options.setCleanSession(false);
options.setMaxInflight(1000);
this.mqttClient.connect(options);

return this.mqttClient.isConnected();
public boolean publish(
  String topic,
  GatewayCommandRequest command
) {
  if (StringUtils.isEmpty(topic) || command == null || !this.isConnected()) return false;

  try {
    var commandStr = objectMapper.writeValueAsString(command);
    MqttMessage msg = new MqttMessage(commandStr.getBytes(StandardCharsets.UTF_8));
    msg.setQos(0);
    this.mqttClient.publish(
      topic,
      msg
    );

    return true;
  } catch (JsonProcessingException | MqttException e) {
    JarvisLogger.logError(
      ExceptionTag.MQTT_EXCEPTION,
      "Publish Failed: " + topic,
      e
    );
  }

  return false;
}