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

Попробуйте удалить линию, в которой вы отключите клиента.