本章將使用Java連接MQTT客戶端,實現發佈消息,訂閱消息,接收消息
引入相關依賴
本例中使用 Maven 來管理依賴的庫文件,打開 pom.xml
,加入以下的 JAR 依賴,等待完成相關 JAR 包的下載。
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.0</version>
</dependency>
完整例子
package paho_demo;
import java.text.MessageFormat;
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.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class Demo {
public static void main(String[] args) {
String broker = "tcp://localhost:1883";
String clientId = "JavaSample";
//Use the memory persistence
MemoryPersistence persistence = new MemoryPersistence();
try {
MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
System.out.println("Connecting to broker:" + broker);
sampleClient.connect(connOpts);
System.out.println("Connected");
//建立連接
String topic = "demo/topics";
System.out.println("Subscribe to topic:" + topic);
//訂閱消息,topic:主題名稱
sampleClient.subscribe(topic);
sampleClient.setCallback(new MqttCallback() {
//接收消息
public void messageArrived(String topic, MqttMessage message) throws Exception {
String theMsg = MessageFormat.format("{0} is arrived for topic {1}.", new String(message.getPayload()), topic);
System.out.println(theMsg);
}
public void deliveryComplete(IMqttDeliveryToken token) {
}
public void connectionLost(Throwable throwable) {
}
});
String content = "Message from MqttPublishSample";
int qos = 2;
System.out.println("Publishing message:" + content);
//發佈消息,topic:主題名稱,MqttMessage:消息內容
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
sampleClient.publish(topic, message);
System.out.println("Message published");
} catch (MqttException me) {
System.out.println("reason" + me.getReasonCode());
System.out.println("msg" + me.getMessage());
System.out.println("loc" + me.getLocalizedMessage());
System.out.println("cause" + me.getCause());
System.out.println("excep" + me);
me.printStackTrace();
}
}
}
參考文檔:https://docs.emqx.io/tutorial/v4/cn/client_dev/java.html