2016-07-27 79 views
0

我是mqtt新手。入门我尝试向蚊子经纪人发布和订阅主题。我能够发布消息。但是我的用户并没有听到这个话题,它会在没有等待/查询消息的情况下开始和停止。无法订阅paho mqtt java

下面是用户代码,

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()); 
} 
} 

缺少什么我在这里?

+0

你的代码似乎是正确的,但有一件事似乎很奇怪,你实际上调用客户端上的断开连接方法,尝试删除这一行 –

+0

工程就像一个魅力:-)。断开用户内部的客户端是愚蠢的,必须作为终结者的一部分移出该块。 –

+0

很高兴能帮到;)我已经把它作为一个答案使它更清晰 –

回答

0

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