【问题标题】:KURA : how to receive MQTT messages using the DataService?KURA:如何使用 DataService 接收 MQTT 消息?
【发布时间】:2015-11-19 17:06:39
【问题描述】:

如何接收发布在特定主题上的 MQTT 消息? 我可以在 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);

    }

}

在 KURA 上使用 DataService 接收 MQTT 消息时,我错过了什么?谢谢。

【问题讨论】:

    标签: osgi mqtt osgi-bundle 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);
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2021-10-15
      相关资源
      最近更新 更多