2017-08-16 33 views
2

此mqtt訂戶代碼正常工作。我可以輕鬆訂閱在broker.hivemq.com上發佈的相關主題的消息。在MQTT訂戶中執行操作

public class AccelerometerSubscriber implements MqttCallback, 
IMqttActionListener { 

public static void main(String[] args) throws MqttException { 
int QUALITY_OF_SERVICE = 2; 
MqttClient client=new MqttClient("tcp://broker.hivemq.com:1883", 
MqttClient.generateClientId()); 
client.setCallback(new SimpleMqttCallBack()); 
client.connect(); 
System.out.println("Subscribing ...."); 
client.subscribe("MQTT Examples"); } 

System.out.println("some action"); //------------right here-------------- 

public void connectionLost(Throwable throwable) { 

System.out.println("Connection to MQTT broker lost!"); } 


public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { 

    System.out.println("Message received:\n\t"+ new String(mqttMessage.getPayload())); 

} 

public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { 

    // not used in this example 

}} 

現在我只想在收到消息時執行操作。我無法做到這一點。

回答

0

你有一個類(AccelerometerSubscriber)實現接口MqttCallback,使用它的一個實例,而不是做client.setCallback(new SimpleMqttCallBack());

public class AccelerometerSubscriber implements MqttCallback, IMqttActionListener { 

    public static void main(String[] args) throws MqttException { 
     AccelerometerSubscriber as = new AccelerometerSubscriber(); 
     int QUALITY_OF_SERVICE = 2; 
     MqttClient client = new MqttClient("tcp://broker.hivemq.com:1883", MqttClient.generateClientId()); 
     client.setCallback(as); 
     client.connect(); 
     System.out.println("Subscribing ...."); 
     client.subscribe("MQTT Examples"); 
    } 

    @Override 
    public void connectionLost(Throwable throwable) { 
     System.out.println("Connection to MQTT broker lost!"); 
    } 
    @Override 
    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { 
     //message is received is here!!! 
     System.out.println("Message received:\n\t" + new String(mqttMessage.getPayload())); 
    } 
    @Override 
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { 
     System.out.println("deliveryComplete"); 
    } 
    @Override 
    public void onFailure(IMqttToken arg0, Throwable arg1) { 
     System.out.println("onFailure"); 
    } 
    @Override 
    public void onSuccess(IMqttToken arg0) { 
     System.out.println("onSuccess"); 
    } 
}