我正在使用thingstream中的mqtt客户端。当我尝试使用qos = 0将消息发布到主题时,将发送消息,但程序仅挂起。然后我尝试使用qos = 1发送消息。消息已成功发送,程序也没有挂起。但是在发送另一条消息时,我会遇到中断异常。谁能帮我吗。
以下是我用来发布消息的代码段。
BufferedReader bufferedReader = new BufferedReader(new FileReader("input.txt"));
StringBuffer stringBuffer = new StringBuffer();
String line = bufferedReader.readLine();
while(line != null){
stringBuffer.append(line);
line = bufferedReader.readLine();
}
使用的库 - org.eclipse.paho.client.mqttv3-1.2.0
初始化mqtt客户端的代码
URL obj = new URL(url);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty ("Authorization", "Token myToken");
conn.setRequestProperty("Content-Type", "application/json");
String data = "{\"files\": [{\"name\": \"main.java\", \"content\": \"" + stringBuffer.toString() + "\"}]}";
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(data);
out.close();
BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream()));
System.out.println(bf.readLine());
答案 0 :(得分:3)
请勿在主线程中发送它,而应使用另一个线程来发布消息。
Thread thread = new Thread() {
public void run() {
mqttClient.publish(topic, message);
}
};
thread.start();
答案 1 :(得分:0)
问题实际上可能不是qos值,而是您的客户端是否与MQTT服务器有良好/稳定的连接。如上所述[{3}} publish
...是一种阻止方法,一旦发布完成就会返回
发布可能没有完成。检查您是否与MQTT服务器建立连接,以及MQTT客户端是否已成功连接到MQTT服务器。
您也可以使用try... catch ...
语句来围绕调用,以查看是否存在异常抛出:
try {
mqttClient.publish(topic, message);
} catch(Exception e) {
e.printStackTrace();
}