MQTT學習——Centos7上安裝Mosquitto和使用
前言
MQTT是IBM開發的一個即時通訊協議。MQTT是面向M2M和物聯網的連接協議,採用輕量級發佈和訂閱消息傳輸機制。Mosquitto是一款實現了 MQTT v3.1 協議的開源消息代理軟件,提供輕量級的,支持發佈/訂閱的的消息推送模式,使設備對設備之間的短消息通信簡單易用。
若初次接觸MQTT協議,可先理解以下概念:
【MQTT協議特點】——相比於RESTful架構的物聯網系統,MQTT協議藉助消息推送功能,可以更好地實現遠程控制。
【MQTT協議角色】——在RESTful架構的物聯網系統,包含兩個角色客戶端和服務器端,而在MQTT協議中包括髮布者,代理器(服務器)和訂閱者。
【MQTT協議消息】——MQTT中的消息可理解爲發佈者和訂閱者交換的內容(負載),這些消息包含具體的內容,可以被訂閱者使用。
【MQTT協議主題】——MQTT中的主題可理解爲相同類型或相似類型的消息集合。
安裝和使用
1 安裝
截止2017年12月,最新版本爲mosquitto-1.4.14
# 下載源代碼包
wget http://mosquitto.org/files/source/mosquitto-1.4.14.tar.gz
# 解壓
tar zxfv mosquitto-1.4.14.tar.gz
# 進入目錄
cd mosquitto-1.4.14
# 編譯
make
# 安裝
sudo make instal
2 問題
【1】編譯過程找不到ares.h
sudo yum install c-ares-devel
【2】編譯過程中找不到libwebsockets.h
sudo yum -y install libwebsockets-devel.x86_64
【3】使用過程中找不到libmosquitto.so.1
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
【解決方法】——修改libmosquitto.so位置
創建鏈接
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
更新動態鏈接庫
sudo ldconfig
簡單測試
一個完整的MQTT示例包括一個代理器,一個發佈者和一個訂閱者。測試分爲以下幾個步驟:
【1】啓動服務mosquitto。
【2】訂閱者通過mosquitto_sub訂閱指定主題的消息。
【3】發佈者通過mosquitto_pub發佈指定主題的消息。
【4】代理服務器把該主題的消息推送到訂閱者
【測試說明】
測試環境:Centos 7
在本例中,發佈者、代理和訂閱者均爲localhsot,但是在實際的情況下三種並不是同一個設備,在mosquitto中可通過-h(–host)設置主機名稱(hostname)。爲了實現這個簡單的測試案例,需要在linux中打開三個控制檯,分別代表代理服務器、發佈者和訂閱者。
1 啓動代理服務
在第一個終端中輸入如下命令:
mosquitto -v
【-v】打印更多的調試信息
2 訂閱主題
在第二個終端中輸入如下命令:
mosquitto_sub -v -t sensor
【-t】指定主題,此處爲sensor
【-v】打印更多的調試信息
3 發佈內容
在第三個終端中輸入如下命令:
mosquitto_pub -t sensor -m 12
【-t】指定主題
【-m】指定消息內容
4 運行結果
當發佈者推送消息之後,訂閱者(也就是第二個終端)獲得以下內容:
sensor 12
而代理服務器控制檯(也就是第一個終端)中會出現——連接、消息發佈和心跳等調試信息。通過代理服務器的調試輸出可以對MQTT協議的相關過程有所瞭解。
總結
通過Mosquitto實現MQTT協議代理器(服務器),爲今後的MQTT協議應用做準備。本文並沒有分析MQTT協議的種種細節,但是希望通過一個簡單的例子把MQTT協議“使用起來”,通過使用過程來理解MQTT協議,在過程中關注細節收集疑問,再閱讀MQTT協議具體內容。