2015-11-19 57 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); 

    } 

}