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"

如下图,订阅的终端窗口中收到的消息:

posted @   WayWayWayne  阅读(298)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
Title
点击右上角即可分享
微信分享提示