2016-07-27 81 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

嘗試刪除斷開客戶端的線路。