gpt4 book ai didi

java - 使用 PAHO 订阅和阅读 MQTT 消息

转载 作者:太空狗 更新时间:2023-10-29 22:38:06 25 4
gpt4 key购买 nike

我正在使用 paho 发送和接收 mqtt 消息。到目前为止,发送消息没有问题,我正在使用 mosquitto 接收消息。

现在我想使用 java 客户端阅读消息,我注意到关于接收消息的文档越来越少。

我实现了 MqttCallback 接口(interface),但我仍然无法弄清楚如何阅读我订阅的主题的消息。

到目前为止,这是我的源代码,我可以使用 mosquitto_sub 阅读消息。

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class PahoDemo implements MqttCallback {
MqttClient client;
MqttClient subClient;

public PahoDemo() {
}

public static void main(String[] args) {
new PahoDemo().doDemo();
}

public void doDemo() {
try {
client = new MqttClient("tcp://192.168.118.11:1883", "Sending");
subClient = new MqttClient("tcp://192.168.118.11:1883",
"Subscribing");
client.connect();
subClient.connect();
subClient.subscribe("foo");
MqttMessage message = new MqttMessage();
message.setPayload("A single message from my computer fff"
.getBytes());
client.publish("foo", message);
client.disconnect();
client.close();
subClient.disconnect();
subClient.close();
} catch (MqttException e) {
e.printStackTrace();
}
}

@Override
public void connectionLost(Throwable cause) {
// TODO Auto-generated method stub

}

@Override
public void messageArrived(String topic, MqttMessage message)
throws Exception {
System.out.println(message);
}

@Override
public void deliveryComplete(IMqttDeliveryToken token) {
// TODO Auto-generated method stub

}

}

最佳答案

在代理有时间发回消息之前,您正在关闭客户端。

此外,您不需要 2 个客户端实例,只需一个即可发送和接收。

我对你的代码做了一些修改,它现在会继续运行并接收消息,直到你终止它。

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class PahoDemo implements MqttCallback {

MqttClient client;

public PahoDemo() {
}

public static void main(String[] args) {
new PahoDemo().doDemo();
}

public void doDemo() {
try {
client = new MqttClient("tcp://192.168.118.11:1883", "Sending");
client.connect();
client.setCallback(this);
client.subscribe("foo");
MqttMessage message = new MqttMessage();
message.setPayload("A single message from my computer fff"
.getBytes());
client.publish("foo", message);
} catch (MqttException e) {
e.printStackTrace();
}
}

@Override
public void connectionLost(Throwable cause) {
// TODO Auto-generated method stub

}

@Override
public void messageArrived(String topic, MqttMessage message)
throws Exception {
System.out.println(message);
}

@Override
public void deliveryComplete(IMqttDeliveryToken token) {
// TODO Auto-generated method stub

}

}

编辑:添加了缺失的client.setCallback(this)

关于java - 使用 PAHO 订阅和阅读 MQTT 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22715682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com