2014-03-28 31 views
8

Ich benutze Paho, um mqtt Nachrichten zu senden und zu empfangen. Bis jetzt war es kein Problem, die Nachrichten zu senden, ich empfange sie, indem ich mosquitto benutze.Abonnieren und lesen MQTT Nachricht mit PAHO

Jetzt möchte ich die Nachrichten mit einem Java-Client lesen und ich bemerkte, dass es weniger Dokumentation über den Empfang der Nachrichten gab.

Ich habe die MqttCallback-Schnittstelle implementiert, aber ich konnte immer noch nicht herausfinden, wie ich eine Nachricht eines Themas lesen kann, das ich abonniert habe.

Dies ist mein Quellcode bisher, ich kann die Nachrichten mit mosquitto_sub lesen.

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; 
import org.eclipse.paho.client.mqttv3.MqttCallback; 
import org.eclipse.paho.client.mqttv3.MqttClient; 
import org.eclipse.paho.client.mqttv3.MqttException; 
import org.eclipse.paho.client.mqttv3.MqttMessage; 

public class PahoDemo implements MqttCallback { 
    MqttClient client; 
    MqttClient subClient; 

    public PahoDemo() { 
    } 

    public static void main(String[] args) { 
     new PahoDemo().doDemo(); 
    } 

    public void doDemo() { 
     try { 
      client = new MqttClient("tcp://192.168.118.11:1883", "Sending"); 
      subClient = new MqttClient("tcp://192.168.118.11:1883", 
        "Subscribing"); 
      client.connect(); 
      subClient.connect(); 
      subClient.subscribe("foo"); 
      MqttMessage message = new MqttMessage(); 
      message.setPayload("A single message from my computer fff" 
        .getBytes()); 
      client.publish("foo", message); 
      client.disconnect(); 
      client.close(); 
      subClient.disconnect(); 
      subClient.close(); 
     } catch (MqttException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void connectionLost(Throwable cause) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void messageArrived(String topic, MqttMessage message) 
      throws Exception { 
System.out.println(message);  
    } 

    @Override 
    public void deliveryComplete(IMqttDeliveryToken token) { 
     // TODO Auto-generated method stub 

    } 

} 

Antwort

27

Sie schließen den Client, bevor der Broker Zeit hat, die Nachricht zurück zu senden.

Auch brauchen Sie nicht 2 Instanzen des Clients, Sie können senden und empfangen mit nur einem.

Ich habe Ihren Code ein wenig bearbeitet, es wird jetzt weiter laufen und Nachrichten erhalten, bis Sie es töten.

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; 
import org.eclipse.paho.client.mqttv3.MqttCallback; 
import org.eclipse.paho.client.mqttv3.MqttClient; 
import org.eclipse.paho.client.mqttv3.MqttException; 
import org.eclipse.paho.client.mqttv3.MqttMessage; 

public class PahoDemo implements MqttCallback { 

MqttClient client; 

public PahoDemo() { 
} 

public static void main(String[] args) { 
    new PahoDemo().doDemo(); 
} 

public void doDemo() { 
    try { 
     client = new MqttClient("tcp://192.168.118.11:1883", "Sending"); 
     client.connect(); 
     client.setCallback(this); 
     client.subscribe("foo"); 
     MqttMessage message = new MqttMessage(); 
     message.setPayload("A single message from my computer fff" 
       .getBytes()); 
     client.publish("foo", message); 
    } catch (MqttException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public void connectionLost(Throwable cause) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void messageArrived(String topic, MqttMessage message) 
     throws Exception { 
System.out.println(message); 
} 

@Override 
public void deliveryComplete(IMqttDeliveryToken token) { 
    // TODO Auto-generated method stub 

} 

} 

EDIT: hinzugefügt, um die fehlenden client.setCallback(this)

+0

Hallo, das funktioniert nicht. ;) '\t @Override \t public void messageArrived (String Thema, MqttMessage Nachricht) \t \t \t throws Exception { System.out.println (Nachricht); \t subClient.disconnect(); \t subClient.close(); \t} – Goot

+0

Dieser Code sollte jetzt kompilieren und läuft gut mit dem neuesten Paho 0.4.0 Code – hardillb

+0

Ich überprüfte die neueste Paho-Version. Ich versuchte ein Android mqtt Client und ich konnte das Thema Nachrichten lesen. Das hängt also nicht mit meiner Moskito-Konfiguration zusammen ... – Goot

Verwandte Themen