MQTTJava客戶端的使用
(mqtt java客戶端整合Spring的參看這篇文章)
Paho Java客戶端是一個用Java編寫的MQTT客戶端庫,用於開發在JVM或其他Java相容平臺(如Android)上執行的應用程式。
Paho Java客戶端提供了兩個API:MqttAsyncClient提供了一個完全非同步的API,通過已註冊的回撥通知完成活動。 MqttClient是MqttAsyncClient的一個同步包裝,其中函式與應用程式同步。
下載
將下面顯示的依賴性定義新增到maven pom檔案中。
最新版本是1.2.0
和當前的快照版本1.2.1-SNAPSHOT
。
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
入門
基類 | 介紹 |
---|---|
MqttClient | 同步呼叫客戶端,使用阻塞方法與MQTT伺服器通訊。 |
MqttAsyncClient | 非同步呼叫客戶端,使用非阻塞方法與MQTT伺服器通訊,允許操作在後臺執行。 |
MqttClientPersistence | 表示永續性資料儲存,用於儲存正在傳輸的出站和入站訊息,從而實現向指定的QoS的傳遞。 可以使用 MqttClient指定此介面的實現,MqttClient將使用該實現來持久儲存QoS為1和2訊息。 |
MqttConnectOptions | 儲存控制客戶端連線到伺服器的方式的選項集,包括使用者名稱、密碼等。 |
MqttMessage | MQTT訊息,儲存應用程式有效負載和指定訊息如何傳遞的選項訊息。 |
下面包含的程式碼是一個非常基本的示例,它連線到伺服器並使用MqttClient同步API釋出/訂閱訊息。
- 釋出端
/**
*釋出端
*/
public class PublishSample {
public static void main(String[] args) {
String topic = "mqtt/test";
String content = "hello 哈哈";
int qos = 1;
String broker = "tcp://iot.eclipse.org:1883";
String userName = "test";
String password = "test";
String clientId = "pubClient";
// 記憶體儲存
MemoryPersistence persistence = new MemoryPersistence();
try {
// 建立客戶端
MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
// 建立連結引數
MqttConnectOptions connOpts = new MqttConnectOptions();
// 在重新啟動和重新連線時記住狀態
connOpts.setCleanSession(false);
// 設定連線的使用者名稱
connOpts.setUserName(userName);
connOpts.setPassword(password.toCharArray());
// 建立連線
sampleClient.connect(connOpts);
// 建立訊息
MqttMessage message = new MqttMessage(content.getBytes());
// 設定訊息的服務質量
message.setQos(qos);
// 釋出訊息
sampleClient.publish(topic, message);
// 斷開連線
sampleClient.disconnect();
// 關閉客戶端
sampleClient.close();
} 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();
}
}
}
- 訂閱端
/**
*訂閱端
*/
public class SubscribeSample {
public static void main(String[] args) throws MqttException {
String HOST = "tcp://iot.eclipse.org:1883";
String TOPIC = "mqtt/test";
int qos = 1;
String clientid = "subClient";
String userName = "test";
String passWord = "test";
try {
// host為主機名,test為clientid即連線MQTT的客戶端ID,一般以客戶端唯一識別符號表示,MemoryPersistence設定clientid的儲存形式,預設為以記憶體儲存
MqttClient client = new MqttClient(HOST, clientid, new MemoryPersistence());
// MQTT的連線設定
MqttConnectOptions options = new MqttConnectOptions();
// 設定是否清空session,這裡如果設定為false表示伺服器會保留客戶端的連線記錄,這裡設定為true表示每次連線到伺服器都以新的身份連線
options.setCleanSession(true);
// 設定連線的使用者名稱
options.setUserName(userName);
// 設定連線的密碼
options.setPassword(passWord.toCharArray());
// 設定超時時間 單位為秒
options.setConnectionTimeout(10);
// 設定會話心跳時間 單位為秒 伺服器會每隔1.5*20秒的時間向客戶端傳送個訊息判斷客戶端是否線上,但這個方法並沒有重連的機制
options.setKeepAliveInterval(20);
// 設定回撥函式
client.setCallback(new MqttCallback() {
public void connectionLost(Throwable cause) {
System.out.println("connectionLost");
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("topic:"+topic);
System.out.println("Qos:"+message.getQos());
System.out.println("message content:"+new String(message.getPayload()));
}
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("deliveryComplete---------"+ token.isComplete());
}
});
client.connect(options);
//訂閱訊息
client.subscribe(TOPIC, qos);
} catch (Exception e) {
e.printStackTrace();
}
}
}
連結
- 專案網站:https://www.eclipse.org/paho
- MQTT協議概述:https://www.jianshu.com/p/73d9c6668dfc
- Paho Java:https://eclipse.org/paho/clients/java/
- GitHub:https://github.com/eclipse/paho.mqtt.java
- Spring支援:https://www.jianshu.com/p/6b60858b7d44
- Mosquitto搭建:https://www.jianshu.com/p/9e3cb7042a2e
相關文章
- redis客戶端的使用Redis客戶端
- github客戶端使用Github客戶端
- FTP 客戶端使用教程FTP客戶端
- 郵件客戶端的配置使用客戶端
- ftp客戶端,ftp客戶端軟體具體怎麼使用?FTP客戶端
- 使用 Webix 建立 Email 客戶端WebAI客戶端
- NEO-GUI 客戶端使用GUI客戶端
- dbus客戶端使用指南客戶端
- odps dship客戶端使用客戶端
- ubuntu 下svn客戶端使用Ubuntu客戶端
- Winform客戶端引用WCF客戶端後,部分類無法正常使用ORM客戶端
- ETH官方客戶端Geth的使用(一)客戶端
- keycloak~scope客戶端模板的使用客戶端
- [jaeger] 二、客戶端使用 (Java版本)客戶端Java
- Curator(ZoooKeeper客戶端)使用詳解客戶端
- 命令列客戶端MySQL如何使用命令列客戶端MySql
- zookeeper 開源客戶端ZkClient使用客戶端client
- zookeeper 開源客戶端Curator使用客戶端
- Elasticsearch及java客戶端jest使用ElasticsearchJava客戶端
- 免安裝Oracle客戶端使用Oracle客戶端
- WebSocket簡單使用(二)-客戶端Web客戶端
- 中文版vnc客戶端,中文版vnc客戶端下載,中文版vnc客戶端如何使用?VNC客戶端
- [轉載] 使用Redis的Java客戶端JedisRedisJava客戶端
- zookeeper Java客戶端API的使用方法Java客戶端API
- ftp客戶端軟體,ftp客戶端軟體哪個好用,使用方法FTP客戶端
- 《samba搭建win客戶端和linux客戶端的區別》Samba客戶端Linux
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- vnc windows客戶端,vnc windows客戶端下載,具體使用教程。VNCWindows客戶端
- 使用Apollo Server搭建GraphQL的服務端和客戶端Server服務端客戶端
- IE客戶客戶端程式開發的利器Bindows客戶端
- 客戶端,服務端客戶端服務端
- 服務端,客戶端服務端客戶端
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 使用 .NET MAUI 開發 ChatGPT 客戶端UIChatGPT客戶端
- Zookeeper客戶端使用與叢集原理客戶端
- windows 上rsync客戶端使用方法Windows客戶端