一、MQTT描述
- MQTT 全稱為 Message Queuing Telemetry Transport(消息隊列遙測傳輸)是一種基於發布/訂閱范式的“輕量級”消息協議,由 IBM 發布。
- MQTT 可以被解釋為一種低開銷,低帶寬占用的即時通訊協議,可以用極少的代碼和帶寬的為連接遠程設備提供實時可靠的消息服務,它適用於硬件性能低下的遠程設備以及網絡狀況糟糕的環境下,因此 MQTT 協議在 IoT(Internet of things,物聯網),小型設備應用,移動應用等方面有較廣泛的應用。
- IoT 設備要運作,就必須連接到互聯網,設備才能相互協作,以及與后端服務協同工作。而互聯網的基礎網絡協議是 TCP/IP,MQTT 協議是基於 TCP/IP 協議棧而構建的,因此它已經慢慢的已經成為了 IoT 通訊的標准。
二、MQTT的基本特點
1.MQTT是一種發布/訂閱傳輸協議,基本原理和實現如下;

MQTT 協議提供一對多的消息發布,可以解除應用程序耦合,信息冗余小。該協議需要客戶端和服務端,而協議中主要有三種身份:發布者(Publisher)、代理(Broker,服務器)、訂閱者(Subscriber)。其中,消息的發布者和訂閱者都是客戶端,消息代理是服務器,而消息發布者可以同時是訂閱者,實現了生產者與消費者的脫耦。
2.使用 TCP/IP 提供網絡連接,提供有序、無損、雙向連接;
MQTT 是一種連接協議,它指定了如何組織數據字節並通過 TCP/IP 網絡傳輸它們。設備聯網,也需要連接到互聯網中,在大萬維的世界中,TCP 如同汽車,有輪子就能用來運輸數據,MQTT 就像是交通規則。在網絡模型中,TCP是傳輸層協議,而 MQTT是在應用層,在 TCP 的上層,因此 MQTT 也是基於這個而構建的,提高了可靠性。
3.對負載內容屏蔽的消息傳輸;
可以對消息訂閱者所接受到的內容有所屏蔽。
4.具體有三種消息發布的服務質量:
至多一次,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。
至少一次,確保消息到達,但消息重復可能會發生。
只有一次,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。
5.小型傳輸,開銷小,固定長度的頭部是 2 字節,協議交換最小化,以降低網絡流量;
整體上協議可拆分為:固定頭部+可變頭部+消息體,這就是為什么在介紹里說它非常適合"在物聯網領域,傳感器與服務器的通信,信息的收集"。
6.使用Last Will和Testament特性通知有關各方客戶端異常中斷的機制;
Last Will:即遺言機制,用於通知同一主題下的其他設備發送遺言的設備已經斷開了連接。
Testament:遺囑機制,功能類似於Last Will。
三、在騰訊雲上安裝mosquitto服務器。
3.1. 在雲服務器上,下載並且安裝mosquitto服務器。
下載地址:https://mosquitto.org/download/
3.2. 配置mosquitto的環境變量。
找到mosquitto的安裝目錄

系統環境變量Path 中添加mosquitto安裝的路徑:

> 在path下添加mosquitto的安裝路徑
C:\Program Files\mosquitto (記得前面加 ;)-----和前面的區別開。
以上操作完畢后,就可以在任何盤符以及文件夾下使用mosquitto的文件夾中文件,方便操作。
3.3 修改mosquitto服務器的用戶名和密碼。發布或者訂閱信息時,必須要輸入用戶名和密碼,增加安全性。
1.打開mosquitto.conf文件,找到allow_anonymous節點,這個節點作用是,是否開啟匿名用戶登錄,默認是true。打開此項配置(將前面的 # 號去掉)之后將其值改為true
修改前:#allow_anonymous
修改后:allow_anonymous false
2: 找到password_file節點,這個節點是告訴服務器你要配置的用戶將存放在哪里。打開此配置並指定pwfile.example文件路勁(注意是絕對路勁)
修改前:#password_file
修改后:password_file /etc/mosquitto/pwfile.example (這里的地址根據自己文件實際位置填寫)
3: 創建用戶名和密碼、打開命令窗口 鍵入如下命令:
mosquitto_passwd -c /etc/mosquitto/pwfile.example admin
提示連續兩次輸入密碼、創建成功。命令解釋: -c 創建一個用戶、/etc/mosquitto/pwfile.example 是將用戶創建到 pwfile.example 文件中、admin 是用戶名。
4: 創建mosquitto用戶。在命令窗口鍵入如下命令:
mosquitto_passwd /etc/mosquitto/pwfile.example mosquitto
同樣連續會提示連續輸入兩次密碼。注意第二次創建用戶時不用加 -c 如果加 -c 會把第一次創建的用戶覆蓋。
至此兩個用戶創建成功,此時如果查看 pwfile.example 文件會發現其中多了兩個用戶。
3.4. mosquitto 文件的含義
在mosquitto 文件夾下有以下文件會使用到:
* 3.4.1 mosquitto.conf:開啟服務器的進程
啟動cmd,運行以下指令:(如果沒配置環境變量,進入mosquitto 安裝的目錄,再執行如下命令)
[`mosquitto -c mosquitto.conf`]
* 3.4.2 mosquitto_sub:開啟訂閱信息
啟動cmd,運行以下指令:如果沒配置環境變量,進入mosquitto 安裝的目錄,再執行如下命令).開啟名稱為“topic”的訂閱。
[`mosquitto_sub -t topic -h "111.223.231.22" -u "admin" -P "admin123"`]
-t: "訂閱的信息名稱"
-u:"用戶名"
-P:"登錄密碼"
-h:"服務器的IP地址"
* 3.4.3 mosquitto_pub:開啟發布信息
啟動cmd,運行以下指令:如果沒配置環境變量,進入mosquitto 安裝的目錄,再執行如下命令).開啟名稱為“topic”的信息發布。
[`mosquitto_pub -t topic -h "111.223.231.22" -u "admin" -P "admin123" -m "{"sensorDatas":[{"flag":"Y1","value":"11"}]}"`]
-t: "訂閱的信息名稱"
-u:"用戶名"
-P:"登錄密碼"
-h:"服務器的IP地址"
-m:"發布的信息,信息為json格式"
注意!! 在windows的cmd中是無法識別""這個符號的,必須輸入改成\".以上輸入就變成了。
[`mosquitto_pub -t topic -h "111.223.231.22" -u "admin" -P "admin123" -m \"{\"sensorDatas\":[{\"flag\":\"Y1\",\"value\":\"11\"}]}\"`]
但是在鋇錸BL102網關中或者mqtt.fx軟件中就不用如此輸入了。
當發布以上消息后,同IP以及topic的訂閱端就可以接收到信息了。
四、mqtt.fx的使用。
4.1 下載並且安裝mqtt.fx
下載地址: http://mqttfx.jensd.de/index.php/download
4.2 點擊“設置配置文件”進行設置,填寫網絡IP,用戶名,密碼等進行連接。


4.3連接完畢后,輸入“訂閱主題”或者“發布主題+訂閱信息”,即可對MQTT服務器進行訂閱/發布信息。

