一 前言
Eclipse Mosquitto
Eclipse Mosquitto 是一个开源的 MQTT 消息代理(broker),实现了 MQTT 协议(版本 3.1、3.1.1 和 5.0)。它轻量、高效,适用于物联网(IoT)和其他需要低带宽、低延迟通信的场景。
MQTT
MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,专为低带宽、不稳定的网络环境设计。它广泛应用于物联网、移动应用和嵌入式系统中。
- 发布/订阅模式:客户端可以发布消息到特定的主题(topic),也可以订阅感兴趣的主题以接收消息。
- 代理(Broker):负责接收发布的消息,并将其转发给订阅了相应主题的客户端。
二 Eclipse Mosquitto特点
- 支持 MQTT 3.1、3.1.1 和 5.0 协议。
- 轻量级,适合资源受限的设备。
- 支持 TLS/SSL 加密通信。
- 支持持久化消息(保留消息和持久会话)。
- 提供命令行工具(mosquitto_pub 和 mosquitto_sub)用于测试和调试。
- 跨平台支持(Linux、Windows、macOS 等)。
三 docker 安装Eclipse Mosquitto
1、docker下载mosquitto镜像
javascript
docker pull eclipse-mosquitto
2、创建文件,配置目录
下载好镜像后可以通过docker images查看下拉好的镜像,确认没有问题后面就开始做运行前的准备了,为了以后方便操作我们需要把常用的文件夹挂在到磁盘中,现在磁盘中创建三个文件夹分别是config,data和log,一个是存放配置文件,可以用来修改mosquitto的端口,配置支持scoket或者匿名访问等。data用来存放数据,log用来存放日志。
mkdir -p /usr/local/mosquitto/config
mkdir -p /usr/local/mosquitto/data
mkdir -p /usr/local/mosquitto/log
在上面创建的config文件夹中创建mosquitto的配置文件mosquitto.conf内容如下:
persistence true
persistence_location /usr/local/mosquitto/data
log_dest file /usr/local/mosquitto/log/mosquitto.log
listener 9001
port 1883
allow_anonymous true
配置说明如下:
bash
listener 1883:
这一行指示 Mosquitto 在端口 1883 上监听 MQTT 连接请求。这是 MQTT 协议的标准端口,客户端通常会连接到这个端口与 MQTT 代理交互。如果您没有特别指定端口,客户端默认也会尝试连接到这个端口。
persistence true:
此配置开启 Mosquitto 的持久化存储功能。当设置为 true 时,Mosquitto 会将未被客户端接收的消息保存到磁盘上。这样,即使 Mosquitto 服务重启,这些消息也不会丢失,而是会在服务恢复后继续发送给相应的订阅者。这对于确保消息可靠传输和防止消息丢失至关重要,特别是在处理重要通知、命令或状态更新等场景。
persistence_location /mosquitto/data/:
这一行定义了 Mosquitto 用于存储持久化消息的目录。此处指定的路径是 /mosquitto/data/,意味着 Mosquitto 会在容器内部(如果是 Docker 容器)或宿主机(如果是直接安装)的相应目录下创建和管理持久化数据文件。确保该目录存在且具有足够的权限供 Mosquitto 写入。
log_dest file /mosquitto/log/mosquitto.log:
这行配置指定了 Mosquitto 的日志输出目的地及文件路径。在这里,日志被定向到文件 /mosquitto/log/mosquitto.log。所有 Mosquitto 的运行日志、错误信息和其他诊断消息都将写入到这个文件中,便于管理员监控服务状态、排查问题或进行审计。
password_file /mosquitto/config/userpass.conf:
这个配置告诉 Mosquitto 使用指定的密码文件 /mosquitto/config/userpass.conf 进行用户身份验证。密码文件通常包含用户名和经过哈希处理的密码对,用于限制客户端访问。只有在密码文件中注册的用户才能成功连接到 Mosquitto,并根据其配置的权限进行发布或订阅操作。启用此配置可以增强 MQTT 服务的安全性,防止未经授权的访问。
per_listener_settings false:
此配置项指示 Mosquitto 是否为每个监听器(listener)单独应用特定的设置。当设置为 false 时,所有监听器共享相同的全局设置,如用户认证、ACL(访问控制列表)、持久化存储等。如果设置为 true,则可以为不同的监听器配置不同的认证方式、权限规则等。此处设为 false 表示所有监听器(如上面定义的 1883 端口)使用相同的认证、权限等设置。
allow_anonymous false:
这个配置禁止 Mosquitto 接受匿名(未经身份验证)的连接请求。当设置为 false 时,所有试图连接到 Mosquitto 的客户端必须提供有效的用户名和密码(通过 password_file 配置的文件进行验证),否则连接请求将被拒绝。可以防止未经授权的设备或客户端访问 MQTT 服务。
然后为创建的目录授权
chmod -R 755 /usr/local/mosquitto
chmod -R 777 /usr/local/mosquitto/log
执行运行命令:
docker run -it --name=mosquitto --privileged -p 1883:1883 -p 9001:9001 -v /usr/local/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v /usr/local/mosquitto/config/userpass.conf:/mosquitto/config/userpass.conf -v /usr/local/mosquitto/data:/mosquitto/data -v /usr/local/mosquitto/log:/mosquitto/log -d eclipse-mosquitto
运行后可以通过docker ps -a查看是否运行成功,如果是用阿里云服务器,还要记得把出入站规则添加上1883和9001端口,方便外网访问
四 MQTT安装使用
1 下载安装
mqtt在官网下载安装
java
https://mqttx.app/?utm_source=mqttx&utm_medium=referral&utm_campaign=logo-to-homepage
2 使用
新增连接,编辑连接信息
编辑完成,点击连接,然后进行消息发送
新增个连接,来测试消息的接收,添加订阅Topic设置为test
下面就可以收到发送的消息