可以将MQTT Paho客户端断开连接吗?

时间:2017-03-08 15:26:15

标签: callback mqtt paho

我有一个 MQTT 客户端(让我们称之为Client-1)使用java PAHO,这是pub并且没有问题的子主题, 在全球的另一边,我有另一个客户端(让我们称之为SuperClient),它可以将公共主题作为我的客户端的命令......

其中一个命令是“DISCONNECT-NOW”,在我的 Client-1 中我已经实现了回调,我正确地接收了msg,但是,当我尝试根据该命令断开连接时得到例外:

  

ReasonCode:32107

     

消息:不允许使用Callback方法断开连接

     

LocalizedMsg:不允许使用Callback方法断开连接

     

例外:不允许使用Callback方法断开连接(32107)

     

不允许使用Callback方法断开连接(32107)

     

at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:31)     在   org.eclipse.paho.client.mqttv3.internal.ClientComms.disconnect(ClientComms.java:460)     在   org.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:632)     在   org.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:601)     在   org.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:608)     在   org.eclipse.paho.client.mqttv3.MqttClient.disconnect(MqttClient.java:256)     在co.ve.de.MqttBroker.disconnect(MqttBroker.java:94)at   co.ve.de.Implementation.lambda $ 1(Implementation.java:53)at   co.ve.de.MqttBroker $ 1.messageArrived(MqttBroker.java:132)at at   org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:475)     在   org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:379)     在   org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:183)     在java.lang.Thread.run(未知来源)

我的问题:有没有办法在没有做一些奇怪的长轮询的情况下从网络异步断开连接?

谢谢!

1 个答案:

答案 0 :(得分:-1)

尝试在单独的线程上运行调用以断开连接。

messageArrived(java.lang.String topic, MqttMessage message) {
  if (disconnect){
    new Thread().run(new Runnable(){
      public void run() {
        client.disconnect();
      }
    });
  }
}