在IOT物联网的世界里,目前有一种主流的协议叫做MQTT协议,这个协议架构主要有发布[publisher]、订阅[subscriber]和代理[broker]三部分组成,此协议在2014年推出3.1版本,2019年推出5.0版本。网上有许多优秀的代理软件基于3.1版本开发,例如mosquitto,为C语言开发,支持WINDOWS,LINUX等平台,下面简单介绍在UBUNTU平台安装和测试mosquitto过程。
1.打开命令行窗口,使用APT下载安装MOSQUITTO软件
安装过程中,会提示各种配置信息,当再次出现命令行提示符时,表示安装完成;
sudo apt install mosquitto
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
libev4 libuv1 libwebsockets7
下列【新】软件包将被安装:
libev4 libuv1 libwebsockets7 mosquitto
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 16 个软件包未被升级。
需要下载 0 B/256 kB 的归档。
解压缩后会消耗 716 kB 的额外空间。
您希望继续执行吗? [Y/n] y
【警告】:下列软件包不能通过认证!
mosquitto
没有验证的情况下就安装这些软件包吗? [y/N] y
正在选中未选择的软件包 libuv1:amd64。
(正在读取数据库 ... 系统当前共安装有 290224 个文件和目录。)
正准备解包 .../libuv1_1.8.0-1_amd64.deb ...
正在解包 libuv1:amd64 (1.8.0-1) ...
正在选中未选择的软件包 libev4。
正准备解包 .../libev4_1%3a4.22-1_amd64.deb ...
正在解包 libev4 (1:4.22-1) ...
正在选中未选择的软件包 libwebsockets7:amd64。
正准备解包 .../libwebsockets7_1.7.1-1_amd64.deb ...
正在解包 libwebsockets7:amd64 (1.7.1-1) ...
正在选中未选择的软件包 mosquitto。
正准备解包 .../mosquitto_1.4.8-1ubuntu0.16.04.7_amd64.deb ...
正在解包 mosquitto (1.4.8-1ubuntu0.16.04.7) ...
正在处理用于 libc-bin (2.23-0ubuntu11.3) 的触发器 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在处理用于 systemd (229-4ubuntu21.29) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19.1) 的触发器 ...
正在设置 libuv1:amd64 (1.8.0-1) ...
正在设置 libev4 (1:4.22-1) ...
正在设置 libwebsockets7:amd64 (1.7.1-1) ...
正在设置 mosquitto (1.4.8-1ubuntu0.16.04.7) ...
正在处理用于 libc-bin (2.23-0ubuntu11.3) 的触发器 ...
a@a-xxxxxxx-xxxx:~$
2.运行mosquitto -h,确认安装软件的版本信息;
mosquitto -h
mosquitto version 1.4.8 (build date Tue, 18 Jun 2019 11:59:34 -0300)
mosquitto is an MQTT v3.1 broker.
Usage: mosquitto [-c config_file] [-d] [-h] [-p port]
-c : specify the broker config file.
-d : put the broker into the background after starting.
-h : display this help.
-p : start the broker listening on the specified port.
Not recommended in conjunction with the -c option.
-v : verbose mode - enable all logging types. This overrides
any logging options given in the config file.
See http://mosquitto.org/ for more information.
3.更新或创建配置文件
使用下面命令行打开配置文件
sudo gedit /etc/mosquitto/mosquitto.conf
然后将下面内容拷到文件中,保存退出。
pid_file /var/run/mosquitto.pid
消息持久存储
persistence true
persistence_location /var/lib/mosquitto/
日志文件
log_dest file /var/log/mosquitto/mosquitto.log
其他配置
include_dir /etc/mosquitto/conf.d
禁止匿名访问
allow_anonymous false
认证配置
password_file /etc/mosquitto/pwfile
权限配置
acl_file /etc/mosquitto/aclfile
4.使用下面命令,创建认证配置服务
sudo touch /etc/mosquitto/pwfile
5.使用下面命令添加新用户和对应的密码,密码测试用输入123456.
sudo mosquitto_passwd /etc/mosquitto/pwfile user1
Password:
Reenter password:
sudo mosquitto_passwd /etc/mosquitto/pwfile user2
Password:
Reenter password:
6.为新用户进行权限配置
使用下面的命令打开权限配置文件
sudo gedit /etc/mosquitto/aclfile
然后将下面的内容输入到文件中,这里创建两个用户,分别对应不同读写权限,然后保存退出;
user1只能发布以test为前缀的主题,订阅以$SYS开头的主题即系统主题
user user1
topic write test/#
topic read $SYS/#
user2只能订阅以test为前缀的主题
user user2
topic read test/#
7.再次在命令行中输入下面的命令,启动mosquitto服务器,其中参数c表示指定特定配置文件启动,参数d表示后台运行
mosquitto -c /etc/mosquitto/mosquitto.conf -d
8.模拟测试
还提供另外两个命令行软件,一个是mosquitto_pub发布消息,一个是mosquitto_订阅消息。
可以先用下面的命令配置第一个用户的订阅信息;
mosquitto_sub -h localhost -t "test/#" -u user2 -P 123456 -i "client1"&
然后配置订阅第二个用户的信息:
mosquitto_sub -h localhost -u user1 -P 123456 -i "client2" -t '$SYS/broker/clients/active'& #发布者 订阅 者都算存活连接
然后新打开一个命令行窗口,使用mosquitto_pub向第一个用户发布一条消息;
mosquitto_pub -h localhost -t "test/abc" -u user1 -P 123456 -i "client3" -m "Hello,World!"
这时会看的之前的命令行窗口会显示收到的消息。