Mosquitto 源码编译与 MQTT 开发环境搭建全攻略

目录

简介1. 下载与编译 Mosquitto1.1 安装依赖1.2 下载与编译源码1.3 编译常见问题与解决1.3.1 找不到 `openssl/ssl.h` 或链接错误1.3.2 找不到 `ares.h`1.3.3 找不到 `uuid/uuid.h`1.3.4 找不到 `cJSON/cJSON.h`1.3.5 找不到 `libmosquitto.so.1`

2. 匿名登录测试2.1 启动服务器与客户端2.2 指定配置文件启动

3. 用户名密码配置3.1 修改配置文件3.2 添加用户3.3 配置主题权限3.4 验证认证

简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的、基于发布/订阅模型的通信协议,广泛应用于物联网设备的数据传输与远程控制。主流的开源代理平台包括:

Mosquitto:由 Eclipse 基金会维护,体积小、易部署,社区活跃。VerneMQ:基于 Erlang,实现高并发和分布式部署。EMQTT:同样基于 Erlang/OTP,性能卓越,商业版提供企业特性,社区版免费开源。

本篇博客以 Mosquitto 为例,演示在 Ubuntu 上从源码下载、编译安装,到匿名测试和用户名密码配置的完整流程。

1. 下载与编译 Mosquitto

1.1 安装依赖

在 Ubuntu 系统下,首先更新软件源并安装基础开发包:

sudo apt-get update

sudo apt-get install -y libssl-dev libc-ares-dev uuid-dev

若需使用 cJSON 库还需额外安装或编译:

git clone https://github.com/DaveGamble/cJSON.git

cd cJSON && make && sudo make install

1.2 下载与编译源码

# 下载 Mosquitto(以 v2.0.15 为例)

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

tar -zxvf mosquitto-2.0.15.tar.gz

cd mosquitto-2.0.15

# 编译与安装

make

sudo make install

编译完成后,可执行文件安装在 /usr/local/bin,库文件安装在 /usr/local/lib。

1.3 编译常见问题与解决

1.3.1 找不到 openssl/ssl.h 或链接错误

确保安装并配置了 OpenSSL 开发包,或从源码编译指定版本:

git clone https://github.com/openssl/openssl.git

cd openssl

git checkout OpenSSL_1_1_1a

./config

make

sudo make install

sudo ldconfig

1.3.2 找不到 ares.h

安装异步 DNS 库:

sudo apt-get install libc-ares-dev

1.3.3 找不到 uuid/uuid.h

安装 UUID 开发包:

sudo apt-get install uuid-dev

1.3.4 找不到 cJSON/cJSON.h

下载并安装 cJSON:

git clone https://github.com/DaveGamble/cJSON.git

cd cJSON && make && sudo make install

1.3.5 找不到 libmosquitto.so.1

创建软链接并更新动态链接缓存:

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

sudo ldconfig

2. 匿名登录测试

2.1 启动服务器与客户端

启动 Mosquitto 服务:

mosquitto -v

-v 为详细模式,打印调试信息,默认监听 1883 端口。

订阅主题:

mosquitto_sub -v -t hello

发布消息:

mosquitto_pub -t hello -m world

订阅端会收到并打印 world。

2.2 指定配置文件启动

如需使用自定义配置,执行:

mosquitto -c /etc/mosquitto/mosquitto.conf -d

-d 表示后台运行,加载指定的配置文件。

3. 用户名密码配置

3.1 修改配置文件

编辑 /etc/mosquitto/mosquitto.conf,添加:

allow_anonymous false

password_file /etc/mosquitto/pwfile

acl_file /etc/mosquitto/aclfile

3.2 添加用户

使用 mosquitto_passwd 创建并添加用户:

sudo mosquitto_passwd -c /etc/mosquitto/pwfile your_username

# 按提示输入密码

3.3 配置主题权限

编辑 /etc/mosquitto/aclfile,赋予用户读写权限:

user your_username

topic write your/topic/#

topic read your/topic/#

3.4 验证认证

重启 Mosquitto:

pkill mosquitto

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

使用用户名密码订阅:

mosquitto_sub -h 127.0.0.1 -t your/topic -u your_username -P your_password

使用用户名密码发布:

mosquitto_pub -h 127.0.0.1 -t your/topic -u your_username -P your_password -m "测试消息"

这样,你就完成了基于 Mosquitto 的 MQTT 开发环境搭建及基础认证配置,能够快速上手物联网项目的消息传输与管理。

参考:

0voice · GitHub