节点之间的mqtt通信。js和java[英] mqtt communication between node.js and java

问题描述

目标是使用mqtt协议发送数据.Java 项目(tempSensor)使用 mqtt 协议和 node.js 生成 tempvalue,它使用 mqtt 订阅 tempvalue.node.js 和 java 项目都使用相同的密钥进行发布/订阅.我可以使用 java 项目发布数据,也可以在 node.js 中订阅数据.但数据不是可读格式.怎么做 ?所以数据是可读的格式.TempStruct 的结构如下:

public class TempStruct implements Serializable {
private static final long serialVersionUID = 1L;

private double tempValue;

public double gettempValue() {
    return tempValue;
}

private String unitOfMeasurement;

public String getunitOfMeasurement() {
    return unitOfMeasurement;
}

public TempStruct(double tempValue, String unitOfMeasurement) {

    this.tempValue = tempValue;
    this.unitOfMeasurement = unitOfMeasurement;
}

public String toJSON() {
      String json = String.format("{'tempValue': %f, 'unitOfMeasurement': '%s'}", tempValue, unitOfMeasurement);
      return json;
    }
   }

使用mqtt发布数据的代码如下:

Logger.log(myDeviceInfo.getName(), "TemperatureSensor",
                "Publishing tempMeasurement");
        System.out.println("JSON Value...."+newValue.toJSON());
        try {
            this.myPubSubMiddleware.publish("tempMeasurement",
                    newValue.toJSON().getBytes("utf-8"), myDeviceInfo);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

使用mqtt接收数据的代码如下:(Node.js)

var mqtt=require('mqtt');
var client=mqtt.connect('mqtt://test.mosquitto.org:1883');
var data;
client.subscribe('tempMeasurement');
client.on('message',function(topic,payload){
//arg=JSON.stringify(arg);
console.log("In Message......");
var tempStruct = JSON.parse(payload);
console.log("tempValue: "+tempStruct.tempValue); 
 });

错误快照如下所示:来自 Node.js 控制台的错误

推荐答案

终于我能解决问题了.在接收端,我们需要将字节转换为可读字符串,然后使用 JSON 解析器解析可读.解决方法如下:

var mqtt=require('mqtt');
var client=mqtt.connect('mqtt://test.mosquitto.org:1883');  
client.subscribe('tempMeasurement');
client.on('message',function(topic,payload){
if(topic.toString()=="tempMeasurement"){
console.log("Message received");
var data =payload.toString('utf8',7);
var temp=JSON.parse(data);
console.log(temp.tempValue,temp.unitOfMeasurement);
//console.log(data);
}  
});

本文地址:https://www.itbaoku.cn/post/978599.html