MQTT(Message Queuing Telemetry Transport)作为一种轻量级的消息传输协议,在物联网、即时通讯和传感器数据采集等领域应用广泛,它基于发布/订阅模式,具有低开销、低带宽占用的特点,在服务器端部署一个稳定可靠的MQTT消息代理是实现这一架构的关键步骤,Mosquitto是一个开源的MQTT代理,它以其高性能、易安装和完全兼容MQTT协议的特性而备受青睐,本文将详细介绍如何在CentOS系统上一步步安装、配置并测试Mosquitto,为您提供一份清晰、完整的操作指南。
环境准备
在开始安装之前,请确保您已具备以下条件:
- 一台运行CentOS 7或CentOS 8/Stream的服务器。
- 拥有sudo权限或root权限的用户账户。
- 服务器已连接到互联网,以便下载必要的软件包。
第一步:安装EPEL仓库
Mosquitto软件包通常包含在EPEL(Extra Packages for Enterprise Linux)仓库中,而不是CentOS的默认仓库,首要任务是启用EPEL仓库。
对于CentOS 7系统,请执行以下命令:
sudo yum install epel-release -y
对于CentOS 8 / Stream系统,请使用dnf
包管理器:
sudo dnf install epel-release -y
执行完毕后,系统将成功添加EPEL仓库,为安装Mosquitto做好了准备。
第二步:安装Mosquitto Broker和客户端工具
我们将通过包管理器安装Mosquitto服务本身以及一套用于测试的客户端工具,客户端工具包括mosquitto_pub
(用于发布消息)和mosquitto_sub
(用于订阅消息)。
在CentOS 7上:
sudo yum install mosquitto mosquitto-clients -y
在CentOS 8 / Stream上:
sudo dnf install mosquitto mosquitto-clients -y
此命令会自动处理所有依赖关系,并将Mosquitto安装到您的系统中。
第三步:启动并启用Mosquitto服务
安装完成后,Mosquitto服务并不会自动启动,我们需要使用systemctl
来手动启动它,并将其设置为开机自启,以确保服务器重启后服务能自动运行。
执行以下命令启动服务:
sudo systemctl start mosquitto
设置服务为开机自启:
sudo systemctl enable mosquitto
为了验证服务是否已经成功运行,可以检查其状态:
sudo systemctl status mosquitto
如果输出信息中显示active (running)
,则表示Mosquitto服务已正常运行。
第四步:配置防火墙
默认情况下,CentOS的防火墙会阻止外部连接,为了让MQTT客户端能够连接到服务器,必须开放标准的MQTT通信端口1883
(TCP协议)。
使用firewall-cmd
来永久开放该端口:
sudo firewall-cmd --permanent --add-port=1883/tcp
重新加载防火墙规则使更改生效:
sudo firewall-cmd --reload
至此,服务器端的网络配置也已完成。
第五步:测试MQTT服务
安装和配置工作完成后,最激动人心的部分就是测试,我们将使用两个终端窗口来模拟发布者和订阅者,验证消息能否正常传递。
打开终端一,运行订阅者命令,监听一个名为test/topic
的主题:
mosquitto_sub -h localhost -t "test/topic"
此命令会一直保持运行状态,等待接收消息。
打开终端二,运行发布者命令,向test/topic
主题发送一条消息“Hello MQTT”:
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT"
回到终端一,您应该会立刻看到屏幕上显示出“Hello MQTT”这条消息,这表明您的Mosquitto服务安装成功,并且能够正常处理发布和订阅请求。
进阶配置:启用用户名密码认证
默认安装的Mosquitto允许匿名连接,这在生产环境中存在安全风险,我们可以通过简单的配置启用用户名和密码认证。
创建密码文件:使用
mosquitto_passwd
命令创建一个用户(例如mqttuser
)并设置密码。-c
参数表示创建新文件。sudo mosquitto_passwd -c /etc/mosquitto/passwd mqttuser
系统会提示您输入两次密码。
修改配置文件:编辑Mosquitto的主配置文件。
sudo vi /etc/mosquitto/mosquitto.conf
在文件末尾添加以下两行,禁用匿名连接并指定密码文件路径:
allow_anonymous false password_file /etc/mosquitto/passwd
重启服务:保存配置文件后,重启Mosquitto服务使配置生效。
sudo systemctl restart mosquitto
客户端在连接时就必须提供正确的用户名和密码了,测试时只需在原命令后添加
-u
(用户名)和-P
(密码)参数即可。
常见问题解答 (FAQs)
问题1:客户端连接Mosquitto服务时提示“Connection refused”或超时怎么办?
解答: 这是最常见的连接问题,通常由以下三个原因造成:
- 服务未运行:首先检查Mosquitto服务状态,使用
sudo systemctl status mosquitto
确认其是否处于active (running)
状态,如果不是,请使用sudo systemctl start mosquitto
启动它。 - 防火墙阻挡:确认服务器的防火墙已开放1883端口,可以使用
sudo firewall-cmd --list-ports
命令查看已开放的端口列表,确保1883/tcp
在其中。 - 网络或地址错误:检查客户端连接时使用的服务器IP地址或主机名是否正确,如果在本地测试,请使用
localhost
或0.0.1
;如果从其他机器连接,请使用服务器的公网或内网IP。
问题2:如何将Mosquitto更新到最新版本?
解答: 由于我们是通过EPEL仓库安装的Mosquitto,更新过程非常简单,只需执行系统的更新命令即可,对于CentOS 7,运行sudo yum update mosquitto
;对于CentOS 8/Stream,运行sudo dnf update mosquitto
,包管理器会自动检查EPEL仓库中的最新版本并执行升级。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复