在物联网(IoT)和实时数据传输日益普及的今天,消息队列和消息代理在应用架构中扮演着越来越重要的角色。对于 Java 开发者而言,选择一款高效、可靠且易于集成的消息代理至关重要。Mosquitto作为一款开源的消息代理软件,凭借其轻量级、支持多种协议(如 MQTT、MQTT-SN、WebSocket)等优势,成为众多开发者的首选。
Mosquitto 基础理论
什么是 Mosquitto
Mosquitto 是由 Eclipse 基金会开发和维护的开源消息代理,它实现了 OASIS MQTT(Message Queuing Telemetry Transport)消息协议,这是一种基于发布 / 订阅模式的轻量级通信协议,特别适合在低带宽、不稳定网络环境下的物联网设备和移动应用中使用。Mosquitto 不仅支持 MQTT 协议,还提供了对 MQTT-SN(用于传感器网络的简化版 MQTT)和 WebSocket 的支持,能够满足不同场景下的消息传递需求。
Mosquitto 的优势
轻量级:Mosquitto 占用资源少,适合在资源受限的设备(如树莓派、嵌入式设备)上运行。
开源免费:遵循 EPL(Eclipse Public License)协议,开发者可以自由使用、修改和分发。
跨平台:支持 Windows、Linux、macOS 等多种操作系统,并且提供了丰富的客户端库,方便与不同语言的应用集成。
安全可靠:支持 TLS/SSL 加密、用户名和密码认证、访问控制列表(ACL)等安全机制,保障消息传输的安全性。
Mosquitto 与 EMQX 对比
性能表现
Mosquitto:作为轻量级消息代理,在低并发、资源受限场景下表现出色,占用系统资源较少,适合小型物联网项目或边缘设备。但在高并发、大规模连接场景中,其性能可能会受到一定限制,处理能力相对较弱。
EMQX:专为高并发、大规模物联网场景设计,采用了分布式架构和高效的消息处理算法,能够支持百万级别的并发连接和高吞吐量的消息处理,在性能上具有明显优势,更适合大型企业级物联网项目或需要处理海量数据的场景。
功能特性
Mosquitto:支持 MQTT、MQTT-SN、WebSocket 等协议,提供基础的发布 / 订阅功能,具备基本的安全机制,如 TLS/SSL 加密、用户名密码认证和访问控制列表(ACL)。但在集群管理、插件扩展等方面功能相对简单。
EMQX:除了支持多种消息协议外,还提供了丰富的功能特性,如强大的集群管理功能,可实现自动发现、负载均衡和故障转移;具备灵活的插件机制,方便扩展功能,如集成数据库、实现消息持久化等;同时还支持规则引擎,可对消息进行过滤、转换和处理。
生态与社区支持
Mosquitto:是开源项目,拥有一定规模的社区,开发者可以在社区中获取帮助和分享经验。但其生态相对较小,插件和工具相对较少。
EMQX:同样是开源项目,并且得到了广泛的应用和推广,拥有活跃的社区和庞大的生态系统。官方提供了丰富的文档、教程和示例,同时还有众多的第三方插件和工具,便于开发者快速构建复杂的物联网应用。
使用场景建议
如果项目对资源占用敏感,属于小规模、低并发的物联网应用,或者是在边缘设备上运行,Mosquitto 是一个不错的选择;而当项目需要处理高并发、大规模连接,对功能丰富度和扩展性有较高要求,例如大型智慧城市、工业物联网项目,EMQX 则更能满足需求 。
安装与部署
Docker
1. 拉取镜像
docker pull eclipse-mosquitto:latest
2. 创建配置文件
创建本地目录存放配置和数据
mkdir -p ./{config,data,log}
编辑配置文件 ./config/mosquitto.conf
# 基础配置
listener 1883
allow_anonymous true # 是否匿名连接
# 持久化与日志
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
3. 启动容器
# 1883 MQTT 默认端口,9001 WebSocket 端口(可选)
docker run -d \
--name my-mosquitto \
-p 1883:1883 \
-p 9001:9001 \
-v $(pwd)/config:/mosquitto/config \
-v $(pwd)/data:/mosquitto/data \
-v $(pwd)/log:/mosquitto/log \
eclipse-mosquitto
Windows
从Mosquitto 官方网站下载安装包,按照安装向导进行安装。
Ubuntu 22.04.5
# 更新系统软件库
sudo apt update
# 安装mosquitto套件
sudo apt-get install mosquitto mosquitto-clients
# 安装完成后查看服务状态
systemctl status mosquitto
一同安装的还有其它mosquitto工具套件:mosquitto、mosquitto_ctrl、mosquitto_passwd、mosquitto_pub、mosquitto_rr、mosquitto_sub
除了基本的mqtt服务mosquitto外,其它工具的作用分别为:
mosquitto_ctrl:这是 Mosquitto 的控制工具,主要用于与运行中的 Mosquitto 代理进行交互,执行管理操作。
主要功能
查看代理状态:获取运行时信息,如连接数、主题数等
动态修改配置:无需重启服务即可调整部分参数
执行维护操作:如清理会话、查看内存使用情况等
mosquitto_ctrl里有很多模块,如统计模块、安全模块,上面安装的默认只有安全模块,即dynsec模块,可使用 mosquitto_ctrl dynsec help
查看使用帮助,主要是关于ACL权限的
mosquitto_passwd:这是密码管理工具,专门用于创建和管理 Mosquitto 的用户密码文件。
主要功能
创建密码文件:生成用于用户认证的密码文件
添加 / 删除用户:管理密码文件中的用户账户
修改用户密码:更新现有用户的登录密码
例子:mosquitto_passwd -c /etc/mosquitto/passwd cxl
,还有其它增删改查命令可通过 mosquitto_passwd --help
查看帮助
mosquitto_pub:这是 MQTT 消息发布工具,用于向 Mosquitto 代理发布消息。
核心参数
-h
:指定代理服务器地址-p
:指定代理服务器端口-t
:指定发布的主题-m
:指定消息内容-q
:指定 QoS 级别 (0,1,2)-u
/-P
:用于认证的用户名和密码
例子:
# 发布简单消息到指定主题
mosquitto_pub -h localhost -t test/topic -m "Hello World"
# 使用QoS 2发布消息并启用TLS
mosquitto_pub -h server.example.com -p 8883 -t sensors/temp \
-m "25.5" -q 2 --cafile /path/to/ca.crt
# 从文件读取内容作为消息发布
mosquitto_pub -t logs/error -f /var/log/error.log
# 发布保留消息
mosquitto_pub -t status -m "online" -r
mosquitto_sub:这是 MQTT 消息订阅工具,用于从 Mosquitto 代理订阅主题并接收消息。
核心参数
-h
:代理服务器地址-p
:代理服务器端口-t
:订阅的主题-v
:显示详细输出(包含主题)-q
:指定订阅的 QoS 级别-u
/-P
:认证信息
例子,图中是我用mqttx客户端进行连接后发送的消息:
# 订阅单个主题并显示消息
mosquitto_sub -h localhost -t test/topic -v
# 订阅多个主题
mosquitto_sub -t "home/#" -t "office/#" -v
# 使用通配符订阅所有主题
mosquitto_sub -t "#" -v
# 订阅并将消息保存到文件
mosquitto_sub -t sensors/data -h 192.168.1.50 > sensor_data.log
# 带认证信息的订阅
mosquitto_sub -t private/topic -u username -P password -v
mosquitto_rr:这是请求 - 响应工具,基于 MQTT 实现远程过程调用 (RPC) 模式。
工作原理
发送请求消息到特定主题
等待并接收来自指定响应主题的回复
自动处理请求 ID 匹配
需配合服务端使用,这里就不作演示了。
配置
基础配置
网络配置
安全认证配置
桥接配置
高级配置
WebSocket 配置
MQTTv5 特定配置
系统资源配置
这些配置选项能满足大多数场景需求。实际使用时,建议先备份配置文件,再逐步调整参数并测试效果