1.什么是MQTT
MQTT(消息隊列遙測傳輸)是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。它工作在TCP/IP協議族上。MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。
2.MQTT應用現狀
因為是工作再TCP/IP協議族上的協議,所以MQTT的網絡環境是wifi、網線連接的局域網或者互聯網。客戶端要有接入網絡建立TCP連接的能力。
MQTT適用于發布/訂閱場景,或者說生產/消費場景。
客戶端只要訂閱了主題,當主題消息發送到服務端時,服務端可以主動推送消息給客戶端。
發布功能可用于傳感器數據的采集。這種應用功能存在于設備監聽、環境監測、大數據分析。
訂閱功能可用于事件驅動的設備控制。這種應用功能存在于告警、設備聯動。
發布/訂閱這種邏輯易于理解,可理解為:如果設備A發生事件1,則設備B執行事件2。即使非開發人員也能對多個客戶端進行編程控制,實現用戶場景內的個性化、靈活多變的定制設備控制策略。
3.MQTT部署和使用示例
以Mosquitto為例,在linux系統中部署測試:
(1)官網下載源碼包mosquitto-1.6.8.tar.gz (之后的版本缺少cjson依賴,比較麻煩)
(2)解壓到/usr/local路徑下
(3)安裝依賴包
yum install gcc gcc-c++ libstdc++-devel yum install openssl-devel -y yum install c-ares-devel -y yum install uuid-devel -y yum install libuuid-devel -y
(4)增加用戶
adduser mosquitto
(5)在mosquitto路徑下執行
make && make install
(6)進入/etc/mosquitto,執行
cp mosquitto.conf.example mosquitto.conf
(7)啟動mosquitto
mosquitto -d -c /etc/mosquitto/mosquitto.conf
(8)新開一個shell窗口,訂閱主題
mosquitto_sub -i "sub" -v -h 192.168.110.68 -p 9000 -t "test" mosquitto_sub -i "sub" -v -h 192.168.2.102 -p 9000 -t "test" mosquitto_sub -i "sub" -v -h 192.168.2.102 -p 9000 -t "system/alert" -u "admin" -P "admin1111"
(9)新開一個shell窗口,發布內容,如果訂閱窗口收到消息,則mqtt部署成功
mosquitto_pub -i "pub" -h 192.168.110.68 -p 9000 -t "test" -m "123" mosquitto_pub -i "pub" -h 192.168.2.102 -p 9000 -t "test" -m "123" mosquitto_pub -i "pub" -h 192.168.2.102 -p 9000 -t "system/alert" -m "客戶端水位告警" -u "admin" -P "admin1111"
4.基于Netty的MQTT服務端實現-kmqtt
主要是實現MQTT協議14個數據包的解析,以及客戶端與服務端的交互時序,外加擴展功能。
相關鏈接:
-知識:http://www.lxweimin.com/p/e15608d26931
-源碼:https://gitee.com/kool2017/kmqtt