在MQTT订阅服务器中执行操作

在MQTT订阅服务器中执行操作,mqtt,subscribe,Mqtt,Subscribe,此mqtt订户代码工作正常。我可以很容易地订阅在broker.hivemq.com上发布的消息,其中包含相应的主题 public class AccelerometerSubscriber implements MqttCallback, IMqttActionListener { public static void main(String[] args) throws MqttException { int QUALITY_OF_SERVICE = 2; MqttClient c

此mqtt订户代码工作正常。我可以很容易地订阅在broker.hivemq.com上发布的消息,其中包含相应的主题

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

}}
现在,我只想在收到消息时执行操作。我不能这样做。

您有一个类(AccelerometerSubscriber)实现接口
MqttCallback
,使用它的一个实例,而不是执行
client.setCallback(新的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");
    }
}