MQTT协议通信——mosquitto

Administrator
Administrator
发布于 2023-11-23 / 44 阅读
0
0

MQTT协议通信——mosquitto

MQTT

MQTT协议简介

MQTT是一种轻量级的发布/订阅消息传输协议,适用于物联网和低带宽环境。它具有以下特点:

  • 简单:协议精简,易于实现和使用。
  • 异步:支持异步消息发布和订阅模式。
  • 轻量级:协议头部开销小,适用于资源受限的设备。
  • 可靠性:支持不同的服务质量(QoS)级别,确保消息的可靠传输。

MQTT协议的工作流程

MQTT协议的工作流程如下:

  • 客户端向服务端发送连接请求(CONNECT)报文,携带自己的身份信息和连接参数。
  • 服务端接收连接请求后,进行身份验证和参数检查,然后返回连接确认(CONNACK)报文,表示连接是否成功。
  • 客户端连接成功后,可以向服务端发送订阅请求(SUBSCRIBE)报文,指定自己感兴趣的主题和服务质量等级。
  • 服务端接收订阅请求后,根据订阅的主题和服务质量等级,返回订阅确认(SUBACK)报文,表示订阅是否成功。
  • 客户端订阅成功后,可以向服务端发送发布消息(PUBLISH)报文,指定消息的主题、服务质量等级和内容。
  • 服务端接收发布消息后,根据消息的服务质量等级,返回相应的确认报文,如发布确认(PUBACK)、发布接收(PUBREC)、发布释放(PUBREL)和发布完成(PUBCOMP)。
  • 服务端同时将发布的消息转发给所有订阅了该主题的客户端,客户端收到消息后,也根据服务质量等级,返回相应的确认报文。
  • 客户端和服务端在空闲时,可以互相发送心跳报文(PINGREQ和PINGRESP),以维持连接的活跃状态。
  • 客户端或服务端在断开连接时,可以发送断开连接(DISCONNECT)报文,以通知对方关闭连接。

Mosquitto

Mosquitto简介

Mosquitto是一个流行的开源MQTT消息代理,可用于搭建自己的MQTT服务器。它具有以下特点:

  • 轻量级:占用资源较少,适合在嵌入式设备上运行。
  • 安全性:支持SSL/TLS加密和客户端身份验证。
  • 访问控制:可以配置访问控制列表以限制连接和发布/订阅权限。
  • 持久化:支持持久化订阅和消息存储,确保断线重连后消息不丢失。

安装Mosquitto

安装Mosquitto的步骤:

  1. 在Linux上,使用包管理器安装Mosquitto:

    sudo apt-get install mosquitto 或 yum
    

1700731159830.jpg

  1. 在Windows上,下载Mosquitto安装程序并按照提示进行安装。

配置Mosquitto

1. 配置文件

Mosquitto的配置文件位于mosquitto.conf,可以在以下位置找到:

  • Linux:/etc/mosquitto/mosquitto.conf
  • Windows:安装目录下的mosquitto.conf

示例配置文件内容:

# 指定Mosquitto进程的PID文件路径
pid file /var/run/mosquitto/mosquitto.pid

# 启用持久化功能,即使在代理重启后也能保留订阅和消息状态
persistence true

# 指定持久化数据存储的位置
persistence_location /var/lib/mosquitto/

# 指定Mosquitto日志文件的路径,所有的日志信息将被写入该文件中
log_dest file /var/log/mosquitto/mosquitto.log

# 禁止匿名连接,客户端连接到Mosquitto代理时,需要提供有效的用户名和密码进行身份验证
allow_anonymous false

//指定密码文件的路径(这里是一个注释,用于说明该配置项的作用)
password_file /etc/mosquitto/passwd

2. 监听端口

通过配置Mosquitto监听指定的端口来接受连接。在配置文件中添加以下内容:

listener 1883

3. 访问控制

可以通过配置访问控制列表来限制连接和发布/订阅权限。首先,创建一个密码文件并添加用户:

sudo mosquitto_passwd -c /etc/mosquitto/passwd username

然后,在Mosquitto配置文件中添加以下内容:

password_file /etc/mosquitto/passwd
allow_anonymous false

使用Mosquitto

1. 发布消息

使用Mosquitto发布消息到特定的主题:

mosquitto_pub -h broker_address -p port -t topic -m "message"

示例:

 mosquitto_pub -h ***.***.***.*** -p 1883 -u *** -P ****** -t "11" -m "666hello"

WX20231123-172435.png

2. 订阅消息

使用Mosquitto订阅特定主题的消息:

mosquitto_sub -h broker_address -p port -t topic

示例:

mosquitto_sub -h ***.***.***.*** -p 1883 -p 1883 -u *** -P ****** -t "11"

1700731568461.jpg

3. QoS级别

在Mosquitto中设置QoS级别:

  • QoS 0:最多一次传输,消息不会进行重传。
  • QoS 1:至少一次传输,确保消息到达,可能会进行重传。
  • QoS 2:恰好一次传输,确保消息只接收一次,可能会进行重传。

通过添加-q参数来指定QoS级别。例如:

mosquitto_pub -h broker_address -p port -t topic -m "message" -q 1

4. 持久化订阅

在Mosquitto中配置和使用持久化订阅:

  • 在订阅时,添加-c参数以表示持久化订阅。
mosquitto_sub -h broker_address -p port -t topic -c

5. SSL/TLS安全连接

配置Mosquitto以支持SSL/TLS安全连接:

  • 生成SSL证书和密钥文件。
  • 在Mosquitto配置文件中添加以下内容:
cafile /path/to/ca.crt
certfile /path/to/server.crt
keyfile /path/to/server.key

故障排除

  • 检查Mosquitto服务是否正在运行。
  • 检查端口是否正确配置并且没有被其他应用程序占用。
  • 检查访问控制列表和用户身份验证设置是否正确。
  • 检查SSL/TLS证书和密钥文件是否正确配置。

参考资料

请注意,以上示例仅供参考,具体配置和命令参数可能会根据你的实际情况而有所不同。请参考相关文档和资料获取更多详细信息。


评论