<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java mqtt是什麼,讓我們一起了解一下?
MQTT是一個基於客戶端-服務器的消息發佈或訂閱傳輸協議,MQTT協議是輕量、簡單、開放和易於實現的,如果工作在TCP或IP協議上,是爲硬件性能低下的遠程設備以及網絡狀況糟糕的情況下而設計的發佈或訂閱型的消息協議。
MQTT主要應用在哪些場合?
1、它是一種機器之間通訊 machine-to-machine (M2M)、物聯網 Internet of Things (IoT)常用的一種輕量級消息傳輸協議。
2、適用於網絡帶寬較低的場合。
3、包含發佈、訂閱模式,透過一個代理服務器(broker),任何一個客戶端(client)都可以訂閱或者發佈某個主題的消息,然後訂閱了該主題的客戶端則會收到該消息。
實戰操作:模擬客戶端接收消息。
import java.util.concurrent.ScheduledExecutorService;import org.eclipse.paho.client.mqttv3.MqttClient;import org.eclipse.paho.client.mqttv3.MqttConnectOptions;import org.eclipse.paho.client.mqttv3.MqttTopic;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; /** * 模擬一個客戶端接收消息 * * @author Unclue_liu */public class ClientMQTT { public static final String HOST = "tcp://192.168.1.77:1883"; public static final String TOPIC1 = "pos_message_all"; private static final String clientid = "12345678"; private MqttClient client; private MqttConnectOptions options; private String userName = "mqtt"; //非必須 private String passWord = "mqtt"; //非必須 private ScheduledExecutorService scheduler; private void start() { try { // host爲主機名,clientid即連接MQTT的客戶端ID,一般以唯一標識符表示,MemoryPersistence設定clientid的儲存形式,默認爲以內存儲存 client = new MqttClient(HOST, clientid, new MemoryPersistence()); // MQTT的連接設定 options = new MqttConnectOptions(); // 設定是否清空session,這裏如果設定爲false表示服務器會保留客戶端的連接記錄,設定爲true表示每次連接到服務器都以新的身份連接 options.setCleanSession(false); // 設定連接的用戶名 options.setUserName(userName); // 設定連接的密碼 options.setPassword(passWord.toCharArray()); // 設定超時時間 單位爲秒 options.setConnectionTimeout(10); // 設定會話心跳時間 單位爲秒 服務器會每隔1.5*20秒的時間向客戶端發送個消息判斷客戶端是否在線,但這個方法並沒有重連的機制 options.setKeepAliveInterval(20); //設定斷開後重新連接 options.setAutomaticReconnect(true); // 設定回調 client.setCallback(new PushCallback()); MqttTopic topic = client.getTopic(TOPIC1); //setWill方法,如果項目中需要知道客戶端是否掉線可以調用該方法。設定最終端口的通知消息 //遺囑 options.setWill(topic, "close".getBytes(), 1, true); client.connect(options); //訂閱消息 int[] Qos = {1};//0:最多一次 、1:最少一次 、2:只有一次 String[] topic1 = {TOPIC1}; client.subscribe(topic1, Qos); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ClientMQTT client = new ClientMQTT(); client.start(); }