Linux下Mosquitto MQTT代理的安装与配置
1. 引言
MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,广泛应用于物联网(IoT)领域。Mosquitto是一个开源的MQTT代理,它支持MQTT协议3.1和3.1.1,适用于各种设备和平台。本文将详细介绍如何在Linux系统下安装和配置Mosquitto MQTT代理。
本文默认bash命令通过root用户执行,以下不再重复说明
2. 安装Mosquitto
2.1. 安装
Mosquitto通常不在CentOS的默认仓库中,但可以通过EPEL(Extra Packages for Enterprise Linux)仓库进行安装。首先,我们需要安装EPEL仓库。
1) 安装EPEL仓库
# yum install epel-release
2) 更新系统
# yum update
3) 安装Mosquitto软件包
使用yum包管理器从EPEL仓库安装Mosquitto,同时安装了服务器和客户端工具。
# yum install mosquitto mosquitto-clients
2.2. 启动并管理Mosquitto服务
-
启动Mosquitto服务
# systemctl start mosquitto
-
设置开机自启
# systemctl enable mosquitto
-
检查服务状态
# systemctl status mosquitto
至此,Mosquitto已成功安装部署。可直接通过无用户认证的方式使用mqtt。
以下是Mosquitto的相关配置
3. Mosquitto的相关配置
Mosquitto的配置文件通常位于:/etc/mosquitto/mosquitto.conf
根据需要修改配置文件中的设置。例如,我们可以更改监听地址和端口、设置持久化选项、配置用户认证等。
3.1 监听端口
一般使用mqtt默认监听端口:1883
如果我们希望修改监听端口,需编辑配置文件
# vim /etc/mosquitto/mosquitto.conf
示例:修改监听端口为:1884
重启mosquitto生效
# systemctl restart mosquitto
3.2 配置用户认证
mqtt默认无需用户认证
配置MQTT的用户名和密码通常涉及编辑MQTT代理的配置文件。
Mosquitto使用pwfile来存储用户名和密码。我们可以使用mosquitto_passwd命令来创建和管理这个文件。
- 创建密码文件
# mosquitto_passwd -c /etc/mosquitto/pwfile username
系统会提示输入密码并再次确认。-c选项表示创建一个新的密码文件;如果文件已经存在,则使用-b选项追加用户。 - 编辑配置文件
# vim /etc/mosquitto/mosquitto.conf
编辑Mosquitto的配置文件/etc/mosquitto/mosquitto.conf,添加或修改以下行以启用密码文件认证。
allow_anonymous false password_file /etc/mosquitto/pwfile
- 重启Mosquitto服务
# systemctl restart mosquitto
4. 测试消息收发
使用Mosquitto提供的命令行工具mosquitto_pub和mosquitto_sub来测试消息发布和订阅功能。
1) 在一个终端窗口中,订阅一个topic
# mosquitto_sub -t "test/topic"
2) 在另一个终端窗口中,发布一条消息
# mosquitto_pub -t "test/topic" -m "hello"
如果一切正常,我们应该在订阅的终端窗口中看到发布的消息。
注意:如果配置了用户认证,则需输入用户名密码
以下是附带用户认证的命令:
1) 在一个终端窗口中,订阅一个topic
# mosquitto_sub -u "username" -P "passwd" -t "test/topic"
2) 在另一个终端窗口中,发布一条消息
# mosquitto_pub -u "username" -P "passwd" -t "test/topic" -m "hello"
如下图,订阅的终端窗口中收到的消息:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)