我有一個微控制器,通過恆溫器將其數據通過Raspberry Pi發送到使用MQTT協議的計算機。庫拉已安裝並正在開發覆盆子。如何訂閱MQTT主題並在Eclipse上打印接收到的消息(Java)
我在接收Putty上的數據時沒有問題,但現在我需要在Eclipse上接收它,所以我可以開發一個程序。
我管理經由使用PAHO用下面的代碼蝕在話題發佈,(這是本主題的其他的Subscribe and Read MQTT Message Using PAHO改編):
package publish;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class PublishSemInterface {
MqttClient client;
public PublishSemInterface() {}
public static void main(String[] args) {
new PublishSemInterface().doDemo();
}
public void doDemo() {
try {
client = new MqttClient("tcp://192.168.0.39:1883", "user");
client.connect();
MqttMessage message = new MqttMessage();
message.setPayload("Published message".getBytes());
client.publish("sensor/temp/out", message);
client.disconnect();
} catch (MqttException e) {
e.printStackTrace();
}
}
}
但訂閱是正在痛苦。我試圖用我上面提到的話題的答案,實現MqttCallback接口:
public class PublishSemInterface implements MqttCallback
連接到客戶端和需要的接口方法(我只需要messageArrived)後,添加setCallback:
client.setCallback(this);
@Override
public void connectionLost(Throwable cause) {}
@Override
public void messageArrived(String topic, MqttMessage message)
throws Exception {
System.out.println(message);
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {}
但它沒有工作。 How to read data from MQTT in Eclipse Paho?
public static void main(String[] args) {
MqttClient client;
MqttConnectOptions conn;
try {
client = new MqttClient("tcp://192.168.0.39:1883", "user");
client.connect();
client.setCallback(new MqttCallback() {
public void connectionLost(Throwable cause) {}
public void messageArrived(String topic,
MqttMessage message)
throws Exception {
System.out.println(message.toString());
}
public void deliveryComplete(IMqttDeliveryToken token) {}
});
client.subscribe("sensor/temp/in");
} catch (MqttException e) {
e.printStackTrace();
}
}
除了它沒有任何工作:我用從以下話題的答案也試過。在這兩種情況下,當我運行代碼時,控制檯處於活動狀態,但是當微控制器發送數據(出現在Putty上)而不是打印時,程序將終止。它看起來好像messageArrived方法沒有被調用。
任何人都可以幫我在Eclipse的控制檯上訂閱和打印嗎?
主題的差異是由於這些代碼來自我的訂閱和發佈程序。 「sensor/temp/out」用於接收數據,「sensor/temp/in」用於發送數據。至於額外的MQTT選項,我還沒有使用它們,因爲現在我專注於訂閱和適當地顯示消息。一旦我成功了,我一定會將這些選項添加到連接中。 – Ernani