「简介」
Mosquitto 是一个轻量级的开源消息代理,遵守 MQTT(Message Queuing Telemetry Transport)协议。它通常用于 IoT(物联网)设备之间的消息传递。以下是对 Mosquitto 的详细介绍:
特性
- 轻量级:Mosquitto 的设计使其适用于资源有限的设备,能够在小型服务器和单板计算机上运行。
- 支持多种平台:可以在 Linux、Windows 和 macOS 等多个操作系统上运行。
- 多用户:支持多客户端连接,能够处理大量并发会话。
- 支持 QoS 级别:支持 MQTT 的三种服务质量(QoS)级别,允许用户根据需求选择消息传递的可靠性。
- QoS 0:最多一次交付
- QoS 1:至少一次交付
- QoS 2:只有一次交付
- 持久性:支持将消息持久化到磁盘,便于在重启后恢复会话状态。
使用场景
- 物联网应用:广泛用于智能家居、工业自动化、环境监控等领域,设备间可以通过低带宽的网络进行高效的消息传递。
- 移动应用:支持低功耗设备,以降低电池消耗,并实现实时数据传输。
- 节点间通信:在分布式系统中,Mosquitto 可用于不同节点之间的异步通信。
组件
- Broker:Mosquitto 的核心是消息代理(Broker),负责接收、过滤、存储和转发消息。所有的通信都通过 Broker 进行。
- Client:连接到 Broker 的应用或设备,可以是发布者(Publisher)、订阅者(Subscriber)或二者兼具。
安全性
- 认证与授权:支持通过用户名和密码进行用户认证,可对主题进行访问控制。
- SSL/TLS 加密:支持加密连接,保护数据传输的安全性。
安装与使用
- 安装:Mosquitto 可以通过 Docker、包管理工具(如 apt、yum)或编译源代码安装。
- 配置:可以通过配置文件轻松定制其行为,如连接参数、认证等。
- 命令行工具:提供 mosquitto_pub
和 mosquitto_sub
命令行工具用于快速发布和订阅消息。
社区与支持
Mosquitto 拥有活跃的开发社区,提供丰富的文档和支持渠道。开发者可以从 GitHub 或官方文档查找资源,解决问题或贡献代码。
总结的来说Mosquitto 是一个强大而灵活的消息代理,非常适合需要高效通信的物联网和分布式应用场景。它的轻量级和易用性,使其成为开发者和企业的热门选择。
「相关环境」
使用MQTTX软件以及一个实际的串口服务器进行连接与通讯。串口服务器使用ebyte公司单串口服务器进行连接。
Mosquitto部署的系统:Debian 12
使用SSH远程服务器进行安装,SSH开启Root权限或者使用sudo权限进行部署(不建议正式部署场景直接使用Root权限)。
「相关地址」
Mosquitto官网:https://mosquitto.org
Debian官网:https://www.debian.org
MQTTX官网:https://mqttx.app
串口服务器:https://www.ebyte.com/product/2124.html
串口服务器的使用可以参考:
「视频教程」
「Mosquitto的安装与部署」
首先,在服务器或设备上安装Mosquitto工具。可以在Mosquitto官网找到安装方法。这里我们演示在Debian 12系统上进行简单安装。安装相对简单,您可以参考官方指南进行安装。
大多数开源系统已将Mosquitto添加到源中,可以直接使用apt-get install mosquitto进行安装。
apt-get install mosquitto
安装完成后,打开配置文件,根据实际需求配置Mosquitto。
vim /etc/mosquitto/mosquitto.conf
有关详细配置信息,请参阅官方手册。这里我们简要总结一下。
# 监听的端口
port 1883
# 使用TLS/SSL加密的端口
# port 8883
# 使用WebSocket协议的端口
# listener 9001
# protocol websockets
# 允许匿名连接
allow_anonymous true
# 用户名和密码认证
password_file /etc/mosquitto/passwd
# 设置客户端ID前缀
# clientid_prefix client-
# 设置日志文件路径
log_dest file /var/log/mosquitto/mosquitto.log
可以根据需要修改以下参数:
port
:设置Mosquitto监听的端口,默认是1883。如果使用TLS/SSL加密,可以取消注释并修改为8883。
listener
:如果要使用WebSocket协议,可以取消注释并设置一个新的端口。
allow_anonymous
:设置是否允许匿名连接。如果设为false,则需要设置用户名和密码认证。
password_file
:指定存储用户名和密码的文件路径。可以使用mosquitto_passwd
命令生成该文件。
clientid_prefix
:设置客户端ID的前缀。可以用于标识不同类型的客户端。
log_dest
:设置日志文件的路径,用于记录Mosquitto的日志信息。
为方便起见,我们进行简单配置:设置端口并允许匿名连接。
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /run/mosquitto/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
allow_anonymous true
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
listener 1883
listener 9001
protocol websockets
配置完成后,重新启动Mosquitto服务以使更改生效。
在Linux上,使用systemd管理Mosquitto服务的情况下:
sudo systemctl restart mosquitto
在Windows上,使用服务管理器来重启Mosquitto服务:
txt
net stop mosquitto net start mosquitto
在macOS上,使用launchctl来重启Mosquitto服务:
txt
sudo launchctl stop homebrew.mxcl.mosquitto sudo launchctl start homebrew.mxcl.mosquitto
根据不同的操作系统和安装方式,可能会有所不同。请根据你的实际情况选择适当的命令来重启Mosquitto服务。
「连接MQTT服务器」
配置成功后,您可以使用设备连接MQTT服务器。打开NE2-D11配置软件,根据需要选择链路并将工作模式更改为MQTT模式。
填入实际MQTT服务器的地址和端口。
然后开始设置MQTT参数。选择标准的「MQTT 3.1.1」,根据Mosquitto配置填入「设备名称」、「用户名」、「密码」。在此示例中,我们使用匿名连接,因此随意填写用户信息。
订阅和发布设置根据实际情况进行配置。我们使用MQTTX软件模拟服务器的数据采集和指令下发。因此,随意填写订阅和发布主题。
设置完成后,保存并重新启动设备。通过产品指示灯观察是否成功连接到服务器。
「MQTT模拟通讯」
成功连接到服务器后,可以开始通讯。我们使用MQTTX软件进行模拟通讯。
连接MQTTX软件后,配置好订阅和发布主题
发送数据进行通讯。使用XCOM串口工具模拟产品串口采集的数据发送到服务器。会发现MQTTX软件成功接收到通过串口发送的数据。
然后使用MQTTX软件发送数据,模拟服务器下发指令,同样可以看到XCOM软件成功接收到MQTTX发送的数据。
至此,关于Mosquitto的MQTT通讯教程就到此结束。有兴趣的朋友可以继续探索。
「Mosquitto其他功能配置」
*用户和密码
在Mosquitto的配置文件中添加用户和密码认证,可以按照以下步骤进行操作:
创建一个密码文件,用于存储用户名和密码。可以使用
mosquitto_passwd
命令生成密码文件。例如,执行以下命令创建一个名为passwd
的密码文件:
mosquitto_passwd -c /etc/mosquitto/passwd <username>
替换<username>
为你要创建的用户名。然后会提示输入密码,输入密码后会生成密码文件。
在Mosquitto的配置文件中添加以下行来启用用户名和密码认证:
txt
password_file /etc/mosquitto/passwd
allow_anonymous false
这里的/etc/mosquitto/passwd
应该是你在第一步中创建的密码文件的路径。
保存并关闭配置文件。
重启Mosquitto服务以使配置生效。具体的重启方法可以参考前面的回答。
配置完成后,客户端连接Mosquitto时需要提供正确的用户名和密码才能进行连接和访问。