Java 使用PAHO订阅和读取MQTT消息
我正在使用paho发送和接收mqtt消息。 到目前为止,发送消息没有问题,我正在使用Mosquito接收它们 现在我想使用java客户机来阅读消息,我注意到关于接收消息的文档更少 我实现了MqttCallback接口,但仍然不知道如何读取我订阅的主题的消息 这是到目前为止我的源代码,我可以使用mosquito_sub读取消息Java 使用PAHO订阅和读取MQTT消息,java,eclipse,mqtt,Java,Eclipse,Mqtt,我正在使用paho发送和接收mqtt消息。 到目前为止,发送消息没有问题,我正在使用Mosquito接收它们 现在我想使用java客户机来阅读消息,我注意到关于接收消息的文档更少 我实现了MqttCallback接口,但仍然不知道如何读取我订阅的主题的消息 这是到目前为止我的源代码,我可以使用mosquito_sub读取消息 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.clie
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
}
}
编辑:添加了丢失的
客户端。setCallback(此)
嗨,这不起作用。;)`@Override public void messageArrived(字符串主题,MqttMessage message)引发异常{System.out.println(message);subClient.disconnect();subClient.close();}该代码现在应该可以用最新的paho 0.4.0代码编译并正常运行谢谢您的回答。太棒了。@Goot您将回调设置为什么?请更新您的代码示例,以便在client.connect()之前调用client.setCallback(this),这样您就不会错过任何通知。