MQTT Java发布者和Nodejs订阅者

时间:2015-12-29 17:38:08

标签: java node.js mqtt

在我目前的项目中,我们尝试启用两个软件组件之间的通信,如下所示。这里,Temperaturesensor(用JavaSE编写)组件定期发布传感器测量,用MQTT JavaSE Publisher编写。 CalculateTemp(用Nodejs编写)组件使用MQTT Nodejs和接收数据进行了订阅。我的问题是 - 当CalculateAvgTemp组件收到数据时垃圾(可能问题是TemperatureSensor正在byte[]和{{{}发送数据1}}组件方面,数据不是从calculateAvgTemp转换的.--如何将byte []数据转换为JSON格式?)

enter image description here byte[]的发布方法如下。 请注意,在发布到MQTT代理之前,数据会转换为byte。

TemperatureSensor

在数据接收方,public void publish(String topicName, Object arg, Device deviceInfo) { DataWrapper dw = new DataWrapper(); dw.setObject(arg); dw.setDevice(deviceInfo); java.io.ByteArrayOutputStream bstream = new java.io.ByteArrayOutputStream(); java.io.ObjectOutputStream st; try { st = new java.io.ObjectOutputStream(bstream); st.writeObject(dw); st.flush(); } catch (IOException e) { e.printStackTrace(); } byte[] bytes = bstream.toByteArray(); try { pub.publish(topicName, 0, bytes); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } } ,代码如下:

CalculateAvgTemp

可能重复的问题是MQTT communication between nodejs and java 但是,建议的解决方案无法正常工作,或者我无法清楚地理解它可以解决问题。

1 个答案:

答案 0 :(得分:1)

ObjectOutputStream会将对象转换为序列化Java对象流,这是Java的内部对象表示法,其他任何东西都不能理解(很容易)。

你需要使用像json.org那样的库来构建一个JSON对象(或者像链接问题中所示的那样手工构建一个字符串),它保持与DataWrapper对象相同的状态,然后将JSON对象输出为字符串,可以作为MQTT消息的字节有效负载发送。