2015-11-19 3 views
0

Как я могу получать сообщения MQTT, опубликованные по определенной теме? Я могу публиковать сообщения в брокером MQTT, но я не знаю, как получать сообщения?KURA: как получать сообщения MQTT с помощью DataService?

Вот мой компонент 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); 

    } 

} 

что я пропустил, чтобы иметь возможность получать сообщения MQTT с использованием DataS ervice на 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); 

    } 

}