给出订阅上面topic接收消息的Java代码
时间: 2023-11-22 17:56:30 浏览: 31
要订阅一个特定的主题并接收来自该主题的消息,您需要使用MQTT客户端库和Java编程语言。 Eclipse Paho是一个流行的MQTT客户端库,支持Java。以下是一个简单的Java代码示例,用于订阅一个特定的主题:
```java
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class SubscribeSample {
public static void main(String[] args) {
String broker = "tcp://mqtt.eclipse.org:1883"; // MQTT broker的地址和端口号
String clientId = "JavaSample"; // 客户端ID,可以任意指定
String topic = "test"; // 要订阅的主题
MemoryPersistence persistence = new MemoryPersistence(); // 客户端持久化
try {
MqttClient client = new MqttClient(broker, clientId, persistence); // 创建MQTT客户端实例
MqttConnectOptions connOpts = new MqttConnectOptions(); // 设置连接选项
connOpts.setCleanSession(true); // 清除会话
System.out.println("Connecting to broker: " + broker);
client.connect(connOpts); // 连接到MQTT broker
System.out.println("Connected");
client.setCallback(new MqttCallback() { // 设置回调函数
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("Message received: " + new String(message.getPayload())); // 打印接收到的消息
}
public void deliveryComplete(IMqttDeliveryToken token) {
}
public void connectionLost(Throwable cause) {
System.out.println("Connection lost: " + cause.getMessage()); // 打印连接丢失的原因
}
});
client.subscribe(topic); // 订阅主题
} catch (MqttException me) {
System.out.println("Reason: " + me.getReasonCode());
System.out.println("Message: " + me.getMessage());
System.out.println("Loc: " + me.getLocalizedMessage());
System.out.println("Cause: " + me.getCause());
System.out.println("Excep: " + me);
me.printStackTrace();
}
}
}
```
在上述代码中,我们创建了一个MqttClient实例并连接到MQTT broker。然后,我们设置了一个回调函数,以便在接收到消息时获取通知。最后,我们订阅了一个特定的主题。当我们运行这个代码时,它将在控制台上打印出所有接收到的消息。