我有:
MqttAsyncClient mq;
...
mq = new MqttAsyncClient(myServer1,"app1");
mq.connect();
...
//(1)
//doing something with mq (pub/sub)
...
mq.disconnect();
mq.close();
//(2)
现在我正在使用Monitoring Console,我看到了:
永远不会停止CALL线程。 怎么样?
答案 0 :(得分:2)
在调用close()方法之前确保asyncclient已断开连接,否则异步的thred将永远阻塞。你可以像这样处理(和@ 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();
}
答案 1 :(得分:0)
我认为使用应该使用:MqttClient client = new MqttClient...
然后调用client.connect();
因为,它将调用代码:aClient.connect(options, null, null).waitForCompletion(getTimeToWait());
(您可以查看源代码)
所以它可以确保连接真正完成。