1. 程式人生 > >2018-11-05-mosquitto-安裝啟動

2018-11-05-mosquitto-安裝啟動

mosquitto

官網

是什麼

基於MQTT協議的開源訊息代理軟體

提供輕量級的,支援可釋出/可訂閱的訊息推送模式,使裝置間的短訊息通訊變得簡單。

redis也支援釋出訂閱哦~

能做什麼

(學習Mosquitto之前最好是先過一遍MQTT協議,更好理解一些配置項吧。)

MQTT能做什麼? 一個開源的即時通訊協議,類似XMPP,但是相對XMPP更輕量,更簡潔,常用於傳送較短的訊息,比如裝置間的通訊,物聯網。XMPP常用於即時聊天。(為啥和XMPP比,~因為我學過XMPP啊[手動狗頭-微博看多的下場])

mosquitto能做什麼?

它實現了MQTT協議,類似Openfire實現了XMPP協議(作為服務端),Spark(此spark非大資料的那個spark)實現了XMPP協議(作為PC客戶端),Smack實現了XMPP(作為安卓端),而mosiqutto實現了MQTT協議,mosquitto作為服務端,mosquitto_sub,mosquitto_pub作為訂閱/釋出客戶端

安裝

我的linux版本是ubuntu。redhat系的,後面出現問題的時候,下載那些東西用的命令是不一樣的。

wget https://mosquitto.org/files/source/mosquitto-1.5.3.tar.gz

下載完成後解壓縮

tar -zxvf mosquitto-1.5.3.tar.gz

解壓後進入該資料夾

cd mosquitto-1.5.3

使用make && make install 失敗,出現了下面幾個問題,百度所得,原文連結沒有儲存

make && make install

問題:make[1]: cc command not found

安裝gcc

apt-get install gcc

問題:編譯找不到openssl/ssl.h

使用apt-get install openssl-xxxx ,阿里雲的那個下載失敗

apt-get install libssl-dev

問題:缺少g++

apt-get install g++

問題:需要uuid。 uuid/uuid.h: No such file or directory錯誤

wget http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-1.41.14.tar.gz
tar xvzf e2fsprogs-1.41.14.tar.gz
// 進入e2fsprogs-1.41.14目錄後執行
cd e2fsprogs-1.41.14
./configure --enable-elf-shlibs
make && make install
cp -r lib/uuid/    /usr/include/  
cp -rf lib/libuuid.so* /usr/lib  

我就出現了這幾個錯誤,然後使用make && make isntall,可以了。

啟動 與 測試

終於要啟動了

啟動

mosquitto -c /etc/mosquitto/mosquitto.conf

訂閱

(另起一個終端)訂閱主題為mqtt的訊息

mosquitto_sub -t "mqtt"

釋出

(再起一個終端)釋出內容為 "hello world"到主題mqtt,

mosquitto_pub -t "mqtt" -m "hello world"

問題:釋出時報錯 mosquitto_pub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

mosquitto_pub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

執行下面的命令即可

sudo /sbin/ldconfig

再次執行

mosquitto_pub -t "mqtt" -m "hello world"

問題:又報錯 Error: The connection was lost.

Error: The connection was lost.

注意此時需要修改配置檔案中的一些配置項,應該就是下面這一個吧

allow_anonymous true

重啟mosquitto

注意使用如下方式重啟,有一些配置項是無法重新載入的

kill -s SIGHUP [mosquitto的pid] 

用這種方式重啟:先停止mosquitto服務,然後再重新啟動

serivce mosquitto restart

或者
service mosquitto stop
mosquitto -c /etc/mosquitto/mosquitto.conf

或者
ps -ef|grep mosquitto
kill -9 [pid]
mosquitto -c /etc/mosquitto/mosquitto.conf

再次執行

mosquitto_pub -t "mqtt" -m "hello world"

OK, 這次成功了,切到監聽端的終端就能看到收到訊息了

前面我們使用mosquitto來建立服務,如果有公用的伺服器(如test.mosquitto.org),那麼只需要使用mosquitto_sub和mosquitto_pub來發布訂閱即可

訂閱端

# 恰逢IG奪冠,來,訂閱一波IG
[email protected]:~# mosquitto_sub -h test.mosquitto.org -t "IG"
b
c

釋出端

[email protected]:~# mosquitto_pub -h test.mosquitto.org -t "ig" -m "a"    
[email protected]:~# mosquitto_pub -h test.mosquitto.org -t "IG" -m "b"  
[email protected]:~# mosquitto_pub -h test.mosquitto.org -t "IG" -m "c"      
[email protected]:~# 

可以發現,釋出端使用 -t “ig” -m “a” 並沒有被收到,-t “IG” -m "b"才能收到, 說明 -t(topic話題)大小寫敏感