mosquitto的安装、配置、使用教程
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 协议开源,用户可随意查看源码和使用。
-
-
参考文件