Activemq WSO2-DAS使用MQTT消息

Activemq WSO2-DAS使用MQTT消息,activemq,mqtt,raspberry-pi2,kura,wso2-das,Activemq,Mqtt,Raspberry Pi2,Kura,Wso2 Das,我正在使用EclipseKura 1.2.2、WSO2 DAS 3.0.0和ActiveMQ 5.12.1在物联网领域进行一些实验。到目前为止,我成功地将DAS设置为M2M中间件服务器,将Raspberry PI2上的Kura设置为IoT网关,将ActiveMQ设置为MQTT服务器 我还编写了一个非常基本的MQTT消息生成器,定期向MQTT服务器发送一个非常简单的MQTT消息,以模拟发送MQTT消息的实际设备。其想法是用定期发送数据的蓝牙设备取代此应用程序 当我使用MQTTSpy监视传入消息时,

我正在使用EclipseKura 1.2.2、WSO2 DAS 3.0.0和ActiveMQ 5.12.1在物联网领域进行一些实验。到目前为止,我成功地将DAS设置为M2M中间件服务器,将Raspberry PI2上的Kura设置为IoT网关,将ActiveMQ设置为MQTT服务器

我还编写了一个非常基本的MQTT消息生成器,定期向MQTT服务器发送一个非常简单的MQTT消息,以模拟发送MQTT消息的实际设备。其想法是用定期发送数据的蓝牙设备取代此应用程序

当我使用MQTTSpy监视传入消息时,我注意到MQTT消息的格式是二进制的。文档中明确说明了这一点,因为Kura在使用MQTT发送数据时使用Google协议缓冲区。由于DAS不支持这种类型的MQTT消息,我假设这会导致服务器不响应任何传入消息

我使用以下定义配置了DAS流:

{
  "streamId": "mqtt_sample_01:1.0.0",
  "name": "mqtt_sample_01",
  "version": "1.0.0",
  "nickName": "mqtt_sample_01",
  "description": "mqtt_sample_01",
  "metaData": [],
  "correlationData": [],
  "payloadData": [
    {
      "name": "temperature",
      "type": "FLOAT"
    }
  ]
}
我还使用以下代码为传入MQTT消息创建了一个接收器:

<?xml version="1.0" encoding="UTF-8"?>
<eventReceiver name="mqtt_sample_receiver_protobuf" statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventreceiver">
    <from eventAdapterType="mqtt-protobuf">
        <property name="topic">mqtt-sender-topic/mqtt-client-01/MQTT_APP_V1/mydata</property>
        <property name="clientId">mqtt-client-01</property>
        <property name="url">tcp://192.168.1.42:1883</property>
        <property name="cleanSession">false</property>
    </from>
    <mapping customMapping="disable" type="map"/>
    <to streamName="mqtt_sample_01" version="1.0.0"/>
</eventReceiver>
无论如何,代理(ActiveMQ)都会发出警告,指出:

WARN Stealing link for clientId mqtt-client-01 From Connection Transport Connection to: tcp://192.168.1.42:4594
我的代码肯定出了什么问题,导致连接断开。问题是什么。因此,欢迎您提出任何建议、想法和解决方案

提示
使用-DosgiConsole选项启动DAS,该选项允许您调查已部署包的状态。成功部署接收器后,命令diag[bundle_number]应输出如下内容:
osgi>diag 473
参考:文件:../dropins/test.wso2.mqtt.receiver.MqttProtobufReceiver->1.0.0.jar[473]
没有未解决的约束


WSO2产品(例如,数据分析服务器)的输入接收器示例能够处理Eclipse Kura(KuraPayload格式)创建的Google协议缓冲区格式的消息

发送消息的Kura示例应用程序也可以是

接收器接收二进制格式的KuraPayload格式并将其转换为XML。检查示例应用程序中的XML格式


请分享您对接收器所做的改进/修改,以帮助他人。

DAS接收器和Kura发送器的客户端ID应具有不同的值。接收方代码中仍然存在一个关于消息类型的小错误,该消息类型应设置为XML而不是MAP。我将重建一个新版本,并让那些可能发现它有用的人可以使用它。
DEBUG {test.wso2.mqtt.receiver.internal.util.MQTTProtobufAdapterListener} -  MQTT client subscribed to : mqtt-sender-topic/mqtt-client-01/MQTT_APP_V1/mydata
INFO {test.wso2.mqtt.receiver.internal.util.MQTTProtobufAdapterListener} -  MQTT Connection successful
WARN {test.wso2.mqtt.receiver.internal.util.MQTTProtobufAdapterListener} -  MQTT connection not reachable
Connection lost (32109) - java.io.EOFException
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:267)
at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:56)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:100)
... 1 more
WARN Stealing link for clientId mqtt-client-01 From Connection Transport Connection to: tcp://192.168.1.42:4594