MQTT开发环境搭建

蒸汽
蒸汽
发布于 2024-11-13 / 23 阅读
1
0

MQTT开发环境搭建

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)

目前MQTT代理的主流平台有下面几个:

这里我们选择mosquitto开源项目。

1 下载和编译mosquitto

这里我们主要讲解Linux Ubuntu系统安装Mosquitoo,其他平台请参考官方https://mosquitto.org说明。

1.1 安装mosquitto所需要依赖

sudo apt-get install uuid-dev

1.2 下载和编译安装源码包下载

wget https://mosquitto.org/files/source/mosquitto-2.0.15.tar.gz

image-20241113160856421.png

解压源码

tar -zxvf mosquitto-2.0.15.tar.gz
​
cd mosquitto-2.0.15

编译与安装源码

make
​
sudo make install

1.3 编译过程中可能遇到的问题:

1.3.1编译找不到openssl/ssl.h或者报链接错误

【解决方法】——安装openssl,并且要注意版本,比如安装1.1.1a (我之前本地安装的1.1.1g版本不行,tag时间 21 Apr 2020)

git clone https://gitee.com/mirrors/openssl.git 
cd openssl
git checkout OpenSSL_1_1_1a
./config
make
sudo make install
sudo ldconfig
$ openssl version
OpenSSL 1.1.1a 20 Nov 2018

覆盖已有的openssl版本,最后做备份

这一步很凶险(覆盖原有的openssl版本),如果是虚拟机请先创建快照,如果是云服务器也先在web控制台创建快照。`

sudo cp -arf /usr/local/lib/libcrypto.* /usr/lib/x86_64-linux-gnu/
​
sudo cp -arf /usr/local/lib/libssl.* /usr/lib/x86_64-linux-gnu/

然后在mqtt目录,一定要先make clean,再重新make。

1.3.2 编译过程找不到ares.h

sudo apt-get install libc-ares-dev

1.3.3 编译过程找不到uuid/uuid.h

sudo apt-get install uuid-dev

1.3.4 编译过程找不到: cjson/cJSON.h

git clone https://github.com/DaveGamble/cJSON.git
​
cd cJSON 
​
make
​
sudo make install

1.3.5 使用过程中找不到libmosquitto.so.1error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

【解决方法】——修改libmosquitto.so位置

创建链接

更新动态链接库

sudo ldconfig

2 匿名登录测试

2.1 启动服务器、开启发布、订阅终端

首先打开三个终端,

  1. 启动代理服务:mosquitto -v

    -v 详细模式 打印调试信息

    默认占用:1883端口

  2. 订阅主题:mosquitto_sub -v -t hello

    -t 指定订阅的主题,主题为:hello

    -v 详细模式 打印调试信息

发布内容:mosquitto_pub -t hello -m world

-t 指定订阅的主题,主题为:hello

-m 指定发布的消息的内容

发布内容后,在订阅主题窗口收到打印

2.2 启动服务端时指定配置文件

上面使用的都是默认配置,如需修改服务器的配置信息需要修改:mosquitto源码目录下的配置文件mosquitto.conf 或者/etc/mosquitto/mosquitto.conf文件在启动服务器时使用命令:mosquitto -c mosquitto.conf -d(在mosquitto安装目录下)这里-d是后台运行。

3 mosquitto用户名密码配置

基于Mosquitto服务器已经搭建成功,大部分都是采用默认的是允许匿名用户登录模式,正式上线的系统需要进行用户认证。

3.1 用户参数说明

Mosquitto服务器的配置文为/etc/mosquitto/mosquitto.conf,关于用户认证的方式和读取的配置都在这个文件中进行配置。

  • allow_anonymous 允许匿名

  • password_file密码文件

  • acl_file 访问控制列表

3.2 修改mosquitto.conf

先拷贝mosquitto.conf.example一份为mosquitto.conf

修改后比如

#不允许匿名
​
allow_anonymous false
​
#配置用户密码文件
​
password_file /etc/mosquitto/pwfile
​
#配置topic和用户
​
acl_file /etc/mosquitto/aclfile

image-20241113162447851.png

3.3 添加用户信息

添加用户名 0voice_mqtt, 密码123456 (自己根据实际情况修改用户名和密码,这里只是演示)

sudo mosquitto_passwd -c /etc/mosquitto/pwfile 0voice_mqtt  

按提示输入 0voice_mqtt对应的密码即可。

自动生成密码文件:/etc/mosquitto/pwfile , 对应mosquitto.conf配置的“password_file /etc/mosquitto/pwfile”路径。

3.4 添加topic和用户的关系

先创建aclfile

sudo cp aclfile.example aclfile  

在该文件末尾添加以下内容

user 0voice_mqtt
​
# write发布权限, mtpic/#代表mtopic这个前缀的主题, 以/分割前缀/#
​
topic write mtopic/#
​
# read订阅权限, mtpic/#代表mtopic这个前缀的主题, 以/分割前缀
​
user 0voice_mqtt
​
topic read mtopic/#

比如主题

  • mtopic

  • mtopic/1

  • mtopic/2

  • mtopic/1/2

3.5 用户认证测试

重启Mosquitto

通过Ctrl+C关闭mosquitto,然后通过下面命令启动Mosquitto

mosquitto -v -c /etc/mosquitto/mosquitto.conf  

(订阅端)客户端启动:

mosquitto_sub -h 127.0.0.1 -t mtopic -u 0voice_mqtt -P 123456  

可以订阅多个主题

mosquitto_sub -h 127.0.0.1 -t mtopic -t mtopic/1 -u 0voice_mqtt -P 123456  

(发布者)客户端启动:

mosquitto_pub -h 127.0.0.1 -t mtopic -u 0voice_mqtt -P 123456 -m "test, you canreceive"

可以发布给多个主题

mosquitto_pub -h 127.0.0.1 -t mtopic -t mtopic/1 -u 0voice_mqtt -P 123456 -m"test, you can receive"

即是如果需要发布多个主题则多个 -t mtopic -t mtopic/1

4 参考

mosquitto --用户配置 及权限管理 https://www.cnblogs.com/saryli/p/9820532.html

MQTT服务器搭建--Mosquitto用户名密码配置

https://blog.csdn.net/u012377333/article/details/69397124


评论