繁体   English   中英

Mqtt客户端Paho关闭问题(Java)

[英]Mqtt Client Paho close issue (Java)

我有:

MqttAsyncClient mq;
   ...
   mq = new MqttAsyncClient(myServer1,"app1");
   mq.connect();
   ...
   //(1)
   //doing something with mq (pub/sub)
   ...
   mq.disconnect();
   mq.close();
   //(2)

现在,我正在使用监视控制台,并且看到:

  • 在(1)中,3个Mqtt线程:MQTT REC,MQTT SND和MQTT调用
  • 在(2)中,有2个Mqtt线程:MQTT SND和MQTT调用
  • 再过几秒钟后,只有1个线程MQTT CALL

CALL线程将永远不会停止。 怎么会 ?

在调用close()方法之前,请确保asyncclient已断开连接,否则async的烦恼将永远阻塞。 您可以这样处理(与@ Tom&@ Mehmet Ince一样):

IMqttToken token = mq.disconnect();

int count = 0;
while (count++<5) {
  if (token.isComplete()) {
    mq.close();
    break;
  }
  try {
    Thread.sleep(2000l);
  } cath(Exception e) {
    //TODO
  }
}

if (count > 5) {
  mq.disconnectForcibly();
  mq.close();
}

我认为使用应该使用: MqttClient client = new MqttClient...然后调用client.connect(); MqttClient client = new MqttClient...

因为,它将调用代码: aClient.connect(options, null, null).waitForCompletion(getTimeToWait()); (您可以检查源代码)

这样就可以确保连接确实完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM