0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

精通 MQTT:消息队列遥测传输指南!

上海晶珩电子科技有限公司 2025-06-16 16:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言

MQTT(消息队列遥测传输)是一种轻量级消息协议,专为低带宽、高延迟和不可靠的网络环境设计。它广泛应用于物联网IoT)应用、消息系统以及实时数据通信领域。

本指南深入探讨了 MQTT 的工作原理,解释了其关键组件,并演示了如何使用 Python 实现 MQTT 客户端。

MQTT 代理

MQTT 系统的核心是代理,它负责管理客户端之间的消息交换。

MQTT 中的客户端

发布者(Publishers):向特定主题发送消息的设备或应用程序。

订阅者(Subscribers):监听这些主题上的消息的设备或应用程序。

代理确保发布者的消息能够可靠地传递给相应的订阅者。

运行本地 MQTT 代理

在本示例中,代理托管在本地(127.0.0.1),这意味着它与 MQTT 客户端运行在同一台机器上。

代理在 Docker 容器中运行,使用 Mosquitto MQTT 代理,并映射到 1883 端口。mosquitto.conf 文件用于配置,允许消息保留和持久化。

MQTT 代理的工作原理

1.代理在 1883 端口监听传入消息。

2.客户端连接到代理。

3.客户端向特定主题发布消息。

4.代理接收并处理消息。

5.代理将消息转发给所有订阅该主题的客户端。

发布者和订阅者

发布者

发布者向特定主题发送消息,代理随后将这些消息分发给感兴趣的客户端。

订阅者

订阅者监听特定主题上的消息,并在收到消息时进行处理。

在 Python 中创建 MQTT 客户端

Python 中的 Paho MQTT 库允许创建可以发布和订阅消息的 MQTT 客户端。

创建 MQTT 客户端

importpaho.mqtt.clientasmqttmqtt_client_1 = mqtt.Client( callback_api_version=mqtt.CallbackAPIVersion.VERSION2, client_id="myClient1", clean_session=True, userdata="Client 1", protocol=mqtt.MQTTv311, transport="tcp")

参数解释

client_id="myClient1" → 为客户端分配一个唯一标识符。

clean_session=True → 如果为 True,客户端断开连接时不会存储会话数据。

protocol=mqtt.MQTTv311 → 指定 MQTT 版本为 3.1.1。

transport="tcp" → 使用 TCP 连接(也可以使用 WebSocket)。

连接到代理

mqtt_client_1.connect("127.0.0.1", port=1883, keepalive=240)

向主题发布消息

mqtt_client_1.publish("robotcell1/temperature", payload=25)

这将向主题 robotcell1/temperature 发送一条消息(25)。任何订阅该主题的客户端将立即收到此消息。

保留消息与非保留消息

保留消息(retain=True)

保留消息会持久化存储在代理上,确保新订阅者能立即收到最后一条消息。

mqtt_client_1.publish("robotcell1/temperature", payload=666, retain=True)

非保留消息(retain=False)

非保留消息仅在发送时被活动订阅者接收。

服务质量(QoS)级别

MQTT 支持三种消息传递保证级别:

+-----------+-----------------------------------+| QOS | Guarantee |+-----------+-----------------------------------+| 0 | At most once (fire and forget) || 1 | At least once (may be duplicated) || 2 | Exactly once (highest reliability)|+-----------+-----------------------------------+

订阅主题

all_messages = []defon_message(client, userdata, msg): print(f"Client:{userdata}| Topic:{msg.topic}| Message:{msg.payload}| Retained:{msg.retain}") all_messages.append(msg)mqtt_client_2 = mqtt.Client()mqtt_client_2.on_message = on_messagemqtt_client_2.connect("127.0.0.1", port=1883, keepalive=240)mqtt_client_2.subscribe("robotcell1/temperature", qos=0)mqtt_client_2.loop_start()

持久会话

默认情况下,当 MQTT 客户端断开连接时,它会丢失所有订阅。如果 clean_session=False,代理会记住:

客户端的订阅。

客户端错过的任何 QoS 1 或 2 消息。

mqtt_client_1= mqtt.Client(client_id="myClient1", clean_session=False)

结论

MQTT 是一种强大且轻量级的实时消息协议。通过利用发布者、订阅者、代理、QoS 级别和保留消息,您可以构建一个适用于物联网及其他领域的健壮消息系统。

原文地址:

https://medium.com/@loughliam/mastering-mqtt-a-guide-to-message-queuing-telemetry-transport-289c74b70777

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2940

    文章

    47365

    浏览量

    408679
  • 传输
    +关注

    关注

    0

    文章

    156

    浏览量

    28303
  • MQTT
    +关注

    关注

    5

    文章

    725

    浏览量

    24812
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】MQTT(消息队列遥测传输

    MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的二进制“轻量级”消息协议,由IB公司发布。针对于网
    发表于 12-21 20:07

    MQTT协议的相关资料分享

    MQTT协议,以及基于百度云的MQTT协议使用.MQTTMQTT(Message Queuing Telemetry Transport,消息队列遥测
    发表于 01-20 07:11

    玩转mqtt协议的方法

    Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让...
    发表于 02-16 06:48

    怎样用MQTT连接树莓派IoT设备

    MQTT(消息队列遥测传输)是一种轻量级消息传递协议,非常适合物联网连接设备的通信。
    的头像 发表于 08-02 09:15 3511次阅读

    怎样从中传输MQTT消息ESP8266/NodeMCU到运行MQTT代理的树莓派

    消息队列遥测传输MQTT)是一种消息传递协议,可在任何具有Internet连接的设备上运行,使其成为物联网中最常用的协议之一项目。它被设计用于具有低带宽限制的系统,因此非常适用于家庭
    的头像 发表于 07-30 09:31 6685次阅读
    怎样从中<b class='flag-5'>传输</b><b class='flag-5'>MQTT</b>消息ESP8266/NodeMCU到运行<b class='flag-5'>MQTT</b>代理的树莓派

    什么是MQTT 有哪些特点

    消息队列遥测传输MQTT)是一种ISO标准消息传递协议,旨在通过不可靠的网络连接传感器。它在TCP/IP互联网协议之上工作。
    的头像 发表于 07-26 10:39 1.5w次阅读
    什么是<b class='flag-5'>MQTT</b> 有哪些特点

    浅谈MQTT与Modbus协议的区别

    MQTT协议(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。 它工作在TCP/IP协议上,是为硬件性能低下的远程设备以及网络状况
    发表于 04-07 11:09 1.8w次阅读
    浅谈<b class='flag-5'>MQTT</b>与Modbus协议的区别

    HTTP及MQTT比较分析

    MQTT(消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。该协议建立在TCP/IP协议之上,在1999年由IBM公司发布,目前已经更
    的头像 发表于 03-25 14:00 6780次阅读

    MQTT OBD车辆遥测开源

    电子发烧友网站提供《MQTT OBD车辆遥测开源.zip》资料免费下载
    发表于 10-24 10:23 6次下载
    <b class='flag-5'>MQTT</b> OBD车辆<b class='flag-5'>遥测</b>开源

    【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】MQTT(消息队列遥测传输

    Telemetry Transport(消息队列遥测 传输 )是一种基于发布/订阅范式的二进制“轻量级”消息协议,由IB公司发布。针对于网络受限和 嵌入式 设备而设计的一种数据传输
    的头像 发表于 11-03 15:42 926次阅读

    MQTT透传和MQTT网关的区别

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯
    的头像 发表于 11-13 10:47 2946次阅读
    <b class='flag-5'>MQTT</b>透传和<b class='flag-5'>MQTT</b>网关的区别

    强大的MQTT! 关于它你应该知道什么

    MQTT指消息队列遥测传输,是物联网的机器对机器(M2M,machine-to-machine)连接协议。MQTT是一个轻量级的发布和订阅协
    的头像 发表于 08-03 11:15 5188次阅读
    强大的<b class='flag-5'>MQTT</b>! 关于它你应该知道什么

    MQTT协议的概念和主要特性 MQTT协议于物联网有何好处

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议。
    的头像 发表于 07-28 11:21 3319次阅读
    <b class='flag-5'>MQTT</b>协议的概念和主要特性 <b class='flag-5'>MQTT</b>协议于物联网有何好处

    MQTT协议详解 概念、特性、版本及作用

    MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议。MQ
    的头像 发表于 08-01 00:09 1.1w次阅读
    <b class='flag-5'>MQTT</b>协议详解 概念、特性、版本及作用

    如何在Raspberry Pi树莓派上安装Mosquitto部署MQTT服务器呢?

    MQTT代表消息队列遥测传输,是一种网络消息协议,通常用于物联网设备之间的消息传输
    的头像 发表于 03-12 11:29 2254次阅读
    如何在Raspberry Pi树莓派上安装Mosquitto部署<b class='flag-5'>MQTT</b>服务器呢?