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話題)大小寫敏感