Activemq WSO2-DAS使用MQTT消息
我正在使用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流: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监视传入消息时,
{
"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