无法订阅paho mqtt java

无法订阅paho mqtt java,java,mqtt,paho,Java,Mqtt,Paho,我是mqtt的新手。开始时,我尝试向mosquitto broker发布和订阅主题。我能够发布消息。但是我的订户没有收听主题,它将启动和停止,而不等待/轮询消息 这是订户代码 public class MqttSubscriber implements MqttCallback { private static final String TOPIC = "iot/endpoint"; public static void main(String[] args) { new MqttSu

我是mqtt的新手。开始时,我尝试向mosquitto broker发布和订阅主题。我能够发布消息。但是我的订户没有收听主题,它将启动和停止,而不等待/轮询消息

这是订户代码

public class MqttSubscriber implements MqttCallback {
private static final String TOPIC = "iot/endpoint";

public static void main(String[] args) {
    new MqttSubscriber().listen();
}

public  void listen() {
    MqttClient client = null;
    try {
        client = MqttClientGenerator.generateSubscriberClient();
        client.connect();
        System.out.println("Fetching messages...");
        client.subscribe(TOPIC);
        client.setCallback(this);
        client.disconnect();
      } catch (MqttException e) {
        e.printStackTrace();
      } catch (Exception e) {
        e.printStackTrace();
    }
}

public void connectionLost(Throwable t) {
    t.printStackTrace();
}

public void deliveryComplete(IMqttDeliveryToken arg0) {

}

public void messageArrived(String topic, MqttMessage message) throws Exception {
    System.out.println("Message received from broker...");
    System.out.println("Received Message: -- ");
    System.out.println(message.getPayload().toString());
}
}
MqttClientGenerator:

public class MqttClientGenerator {
private static final String BROKER_URI = "tcp://localhost:1883";
private static final String CLIENT_ID = "pub";
private static final String SUBSCRIBER_ID = "sub";


private MqttClientGenerator () {}

public static MqttClient generatePublisherClient() throws MqttException{
    //adding timestamp to make client name unique every time
    return new MqttClient(BROKER_URI, CLIENT_ID+new Date().getTime());
}

public static MqttClient generateSubscriberClient() throws MqttException{
    //adding timestamp to make client name unique every time
    return new MqttClient(BROKER_URI, SUBSCRIBER_ID+new Date().getTime());
}
}

我在这里遗漏了什么?

尝试删除断开客户端连接的线路。

尝试删除断开客户端连接的线路。

您的代码似乎正确,但有一件事似乎很奇怪,您实际上在调用客户端上的断开连接方法,尝试删除此线路就像一个符咒:-)。断开订阅服务器内部的客户端连接是愚蠢的,必须作为terminator的一部分移出该块。很高兴提供帮助;)我这样做是为了让你的代码看起来是正确的,但有一件事似乎很奇怪,你实际上是在你的客户机上调用disconnect方法,试着像符咒一样删除这行代码:-)。断开订阅服务器内部的客户端连接是愚蠢的,必须作为terminator的一部分移出该块。很高兴提供帮助;)我这样做是为了让它更清楚