2015-11-19 24 views
0

如何接收發布在特定主題上的MQTT消息? 我可以在MQTT代理上發佈消息,但我不知道如何接收消息?KURA:如何使用DataService接收MQTT消息?

這裏是我的組件的xml:

<?xml version="1.0" encoding="UTF-8"?> 
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" name="arduinoCommunicator"> 
    <implementation class="arduinoCommunicator.ArduinoCommunicator"/> 
    <reference bind="setDataService" cardinality="1..1" interface="org.eclipse.kura.data.DataService" name="DataService" policy="static" unbind="unsetDataService"/> 
    <service> 
     <provide interface="org.eclipse.kura.data.DataServiceListener"/> 
    </service> 
</scr:component> 

這裏是我的包激活器類,我只保留了所需的代碼,我實現了DataServiceListener,我訂閱的onConnectionEstablished(話題),我想象我onMessageArrived在功能上的消息,問題是我沒有看到,認購已經取得並且不執行onMessageArrived()的函數日誌:

public class ArduinoCommunicator implements DataServiceListener { 
public static DataService dataService; 


@Override 
public void onConnectionEstablished() { 
    String topic="egmkey/device2/cmd/PING"; 
    System.out.println("connection has been established"); 
    try { 
     ArduinoCommunicator.dataService.subscribe(topic, 1);//egmkey/device2/cmd/PING 
     System.out.println("subscription done to topic"+topic); 
    } catch (KuraException e) { 
     System.out.println("failed to subscribe: "+ e); 
    } 
} 

@Override 
    public void onMessageArrived(String topic, byte[] payload, int qos, boolean retained) { 
     System.out.println("message received!!!!!!!!!!!!!!!!!!!!!!:"+topic); 

    } 

} 

什麼我錯過了能夠使用DataS接收MQTT消息在KURA上的服務?謝謝。

回答

1

您無法正確地將DataService服務注入到組件中。下面的代碼應該更接近您實際需要的內容:

public class ArduinoCommunicator implements DataServiceListener { 
    public DataService dataService; 

    protected setDataService(DataService dataService) { 
     this.dataService = dataService; 
    } 

    @Override 
    public void onConnectionEstablished() { 
     String topic = "egmkey/device2/cmd/PING"; 
     System.out.println("connection has been established"); 
     try { 
      dataService.subscribe(topic, 1);//egmkey/device2/cmd/PING 
      System.out.println("subscription done to topic" + topic); 
     } catch (KuraException e) { 
      System.out.println("failed to subscribe: " + e); 
     } 
    } 

    @Override 
    public void onMessageArrived(String topic, byte[] payload, int qos, boolean retained) { 
     System.out.println("message received!!!!!!!!!!!!!!!!!!!!!!:" + topic); 

    } 

}