mosquitto的安裝、配置、使用教程
一、 mosquitto簡介
- 官方網站,https://mosquitto.org
- 一款實現了消息推送協議 MQTTv5.0, v3.1.1, v3.1 的開源消息代理軟件,提供輕量級的,支持可發布/可訂閱的的消息推送模式,使設備對設備之間的短消息通信變得簡單,比如現在應用廣泛的低功耗傳感器,手機、嵌入式計算機、微型控制器等移動設備。
- 什么是MQTT,他的英文全稱Message Queuing Telemetry Transport,翻譯過來就是“消息隊列遙測傳輸”,是ISO 標准(ISO/IEC PRF 20922)下基於發布/訂閱范式的消息協議。它工作在 TCP/IP協議族上,是為硬件性能低下的遠程設備以及網絡狀況糟糕的情況下而設計的發布/訂閱型消息協議。
目前支持MQTT的服務器中間件有EMQTT、Mosquitto、Apollo - windows安裝,參考
二、mosquitto的linux安裝(ubuntu)
-
給安裝源增加存儲庫
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa # 更新安裝源 sudo apt update
-
使用apt安裝mosquiito
sudo apt-get install mosquitto
-
啟動重啟和停止服務
sudo /etc/init.d/mosquitto restart/stop/start #修改配置文件 sudo vim /etc/mosquitto/mosquitto.conf
三、 mosquitto客戶端命令
-
使用apt安裝命令行客戶端
sudo apt-get install mosquitto-clients
-
mosquitto_pub是推送消息,參數說明
- -d 打印debug信息
- -f 將指定文件的內容作為發送消息的內容
- -h 指定要連接的域名 默認為localhost
- -i 指定客戶端clientid,默認為附加進程ID的mosquitto_pub_
- -I 指定clientId前綴
- -m 消息內容
- -n 發送一個空(null)消息
- -p 連接端口號
- -q 指定QoS的值(0,1,2)
- -t 指定topic
- -u 用戶名
- -P 用戶密碼
- -V 指定MQTT協議版本
- --will-payload 指定一個消息,該消息當客戶端與broker意外斷開連接時發出。該參數需要與--will-topic一起使用
- --will-qos Will的QoS值。該參數需要與--will-topic一起使用
- --will-retain 指定Will消息被當做一個retain消息(即消息被廣播后,該消息被保留起來)。該參數需要與--will-topic一起使 用
- --will-topic 用戶發送Will消息的topic
-
使用示例
mosquitto_sub -h localhost -t "topic/#" -i "client1" -u bruce -P lan1532
-
mosquitto_sub訂閱主題,參數說明
- -c 指定客戶端clean_session是否保存。
- -d 打印debug信息
- -h 指定要連接的域名 默認為localhost
- -i 指定客戶端clientid
- -I 指定clientId前綴
- -k keepalive 每隔一段時間,發PING消息通知broker,仍處於連接狀態。 默認為60秒.
- -q 指定希望接收到QoS為什么的消息 默認QoS為0
- -R 不顯示陳舊的消息
- -t 訂閱topic
- -v 打印消息
- --will-payload 指定一個消息,該消息當客戶端與broker意外斷開連接時發出。該參數需要與--will-topic一起使用
- --will-qos Will的QoS值。該參數需要與--will-topic一起使用
- --will-retain 指定Will消息被當做一個retain消息(即消息被廣播后,該消息被保留起來)。該參數需要與--will-topic一起使>用
- --will-topic 用戶發送Will消息的topic
-
使用示例
mosquitto_pub -h 172.18.205.245 -t "topic/test" -i "client3" -m "How are you?" -u bruce -P lan1532
-
QOS消息服務質量,默認是0
- qos=0, “至多一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。
- qos=1, “至少一次”,確保消息到達,但消息重復可能會發生。
- qos=2 ,“只有一次”,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。
四、使用docker安裝
-
拉取mosquitto的鏡像,最新的版本是2.0.14,官方鏡像
docker pull eclipse-mosquitto
-
創建掛載目錄及配置文件
```bash
mkdir -p /mosquitto/config
touch /mosquitto/config/mosquitto.conf
mkdir -p /mosquitto/data
mkdir -p /mosquitto/log
touch /mosquitto/pwdfile
touch /mosquitto/aclfile
```
-
docker啟動容器
docker run -itd --name mosquitto -p 1883:1883 -p 9001:9001 -v /mosquitto:/mosquitto eclipse-mosquitto
五、 配置文件說明
- 主配置文件, 官方文檔
pid_file /var/run/mosquitto.pid
# 消息持久存儲
persistence true
persistence_location /var/lib/mosquitto/
# 日志文件
log_dest file /var/log/mosquitto/mosquitto.log
#不記錄
#log_type none
#########下面的debug、error、warning.....等等可以組合使用。
#記錄網絡通信包,通信包大小(含心跳包),但不顯示內容
log_type debug
#錯誤信息(沒見過)
log_type error
#警告信息(沒見過)
log_type warning
#設備的訂閱信息、發布信息及下線信息(端口、設備名、用戶、不包發布內容)
log_type notice
#服務啟動關閉信息、版本號、端口號、配置文件信息
log_type information
#所有設備訂閱主題提醒
log_type subscribe
#這個沒有試出來干啥用的(沒見過)
#log_type unsubscribe
# 其他配置 這個docker配置中可以不要
include_dir /etc/mosquitto/conf.d
# 禁止匿名訪問
allow_anonymous false
# 認證配置
password_file /mosquitto/pwdfile
# 權限配置
acl_file /mosquitto/aclfile
#如果需要外網可以訪問,就必須指定mqtt協議
#MQTT協議
port 1883
protocol mqtt
# 設置最大連接數
max_connections -1
#websockets協議
listener 8000
protocol websockets
#如果需要查看websockets日志還可以加入以下面
log_type websockets
websockets_log_level 0
# 設置前綴
clientid_prefixes guduyl
-
認證配置文件
#創建用戶和密碼 mosquitto_passwd -b /mosquitto/pwdfile username #然后輸入及確認密碼
mosquitto_passwd參數說明:
- -c 是創建一個新的文件,只保存一個用戶
- -b 在文件中新增一個用戶在最后
- -D 從文件中刪除指定用戶
- -H密碼加密方式
- 官方文檔網址
-
權限配置文件
# 打開配置 vim /mosquitto/aclfile # 李雷只能發布以test為前綴的主題,訂閱以$SYS開頭的主題即系統主題 user lilei topic write test/# topic read $SYS/# # 韓梅梅只能訂閱以test為前綴的主題 user hanmeimei topic read test/#
六、使用遇到的坑
- docker啟動的容器,可以在容器內部訪問,無法再容器外部訪問。或者ubuntu安裝,localhost可以訪問,其他及其無法訪問
- 報錯信息,是connection refused
- 解決辦法,需要再配置文件中,指定端口port和協議類型protocol mqtt,重啟服務即可
七、開發庫
- go使用的庫是eclipse的開源庫,github.com/eclipse/paho.mqtt.golang
- 參考文件[如何在 Golang 中使用 MQTT]
- java相關
- GitHub:https://github.com/eclipse/paho.mqtt.java
- MQTT Java客戶端的使用:https://www.jianshu.com/p/65e1748a930c
- Spring支持:https://www.jianshu.com/p/6b60858b7d44
- 更多語言
八、windows系統下桌面客戶端推薦
-
MQTT X
- 國產跨平台開源的MQTT5.0客戶端工具
- 官方文檔及下載
-
MQTT Exploer
-
MQTT Explorer 是一個全面且易於使用的 MQTT 客戶端,是目前比較流行的 MQTT 桌面測試客戶端之一,基於它提供有關 MQTT Topics 的結構化預覽展示,並使其在對 MQTT Broker 上的設備/服務的使用變得非常簡單。目前基於 CC BY-NC-ND 4.0 協議開源,用戶可隨意查看源碼和使用。
-
-
參考文件