Contents

MQTT server build--Mosquitto

Mosquitto简介

MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议, 适用于一些条件比较苛刻的环境,进行低带宽、不可靠或间歇性的通信。目前已经是物联网消息通信事实上的标准协议了。 mqtt提供三种不同质量的消息服务:

  • “至多一次”:消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • “至少一次”:确保消息到达,但消息重复可能会发生。
  • “只有一次”:确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

Mosquitto安装(Ubuntu)

安装mosquitto

1
sudo apt install mosquitto

查看mosquitto服务状态

1
sudo service mosquitto status

/images/2022-10-16-MQTT服务器搭建--Mosquitto/1

开启/停止mosquitto服务

1
2
sudo service mosquitto start
sudo service mosquitto stop

安装mosquitto客户端

1
sudo apt install mosquitto-clients

Mosquitto测试

打开一个终端,订阅主题

1
mosquitto_sub -h localhost -t "mqtt" -v

打开另一个终端,发布主题

1
mosquitto_pub -h localhost -t "mqtt" -m "Hello MQTT"

/images/2022-10-16-MQTT服务器搭建--Mosquitto/2

Mosquitto配置

配置文件都在 /etc/mosquitto 目录下

主配置文件 mosquitto.conf

配置用户验证信息

1
2
3
4
5
6
7
8
# 不允许匿名
allow_anonymous false

# 配置用户密码文件
password_file /etc/mosquitto/pwfile

# 配置topic和用户权限文件
acl_file /etc/mosquitto/acl

添加用户信息命令,根据提示输入两边密码

1
mosquitto_passwd -c /etc/mosquitto/pwfile username

完后会在 /etc/mosquitto/pwfile 目录下生成名 pwfile 文件,里边即是用户信息

权限配置

1
vim /etc/mosquitto/acl
1
2
3
4
5
6
7
8
# 李雷只能发布以test为前缀的主题,订阅以$SYS开头的主题即系统主题
user lilei
topic write test/#
topic read $SYS/#

# 韩梅梅只能订阅以test为前缀的主题
user hanmeimei
topic read test/#

注:配置完成后重启

Mosquitto命令

发布使用 mosquitto_pub 命令,订阅使用 mosquitto_sub 命令。常用参数介绍:

参数 描述
-d 开启debug选项
-h 服务器主机,默认localhost
-p 连接的端口号,默认是1883
-t 指定主题
-u 用户名
-P 密码
-i 客户端id,唯一
-m 发布的消息内容
-f 把一个文件的内容做为消息的内容发送
-q 指定消息的服务质量,可以为0,1,2,默认是0

订阅

1
 mosquitto_sub -h localhost -t "test/#" -u hanmeimei -P 123456 -i "client1"

发布

1
mosquitto_pub -h localhost -t "test/abc" -u lilei -P 123456 -i "client3" -m "How are you?"

订阅系统主题

1
2
# 订阅客户端存活连接数
mosquitto_sub -h localhost –t '$SYS/broker/clients/active' -u lilei -P 123456 -i "client2"