在MQTT java中使用qos = 0发布消息时程序挂起

时间:2018-04-02 08:46:45

标签: java mqtt

我正在使用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());

2 个答案:

答案 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();
}