MQTT中文站
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
      • Node-RED 安装部署
      • Node-RED 用户指南
      • Node-RED 创建节点
      • Node-RED 示例教程
      • Node-RED 开发流程
      • Node-RED 接口参考
      • Node-RED 配置模板
      • Node-RED 常见问题
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册
首页 MQTT 教程 MQTT 保留消息是什么?如何使用?

MQTT 保留消息是什么?如何使用?

1 年前 • MQTT 教程

MQTT(Message Queuing Telemetry Transport)是一个轻量级的消息协议,广泛用于物联网(IoT)中设备间的通信。它支持多种消息传递模式,包括发布/订阅模式,使得数据交换变得简单高效。在MQTT协议中,保留消息(Retained Messages)是一个特殊的功能,它允许消息被保留在MQTT代理(Broker)上,直到有新的客户端订阅匹配的主题(Topic)时才被发送。

什么是MQTT保留消息?

当一个MQTT客户端向代理发布一个消息时,它可以选择将这个消息标记为“保留”。这意味着即使在消息发布之后,这个消息也会在MQTT代理上保留。当有新的客户端订阅了这个消息的主题时,这个保留的消息会立即被发送给这个新的订阅者,即使这个消息是在很久以前发布的。这样做的好处是,新的订阅者可以立即获得最新的状态更新,而不需要等待下一个状态变化的消息。

如何使用MQTT保留消息?

  1. 发布保留消息: 当客户端发布一个消息到MQTT代理时,它可以设置MQTT消息的retain标志为true。这可以通过客户端库的API完成,具体方法取决于所使用的库。例如,在Mosquitto的C库中,可以使用mosquitto_publish函数,并将retain参数设置为true。
  2. 订阅并接收保留消息: 当客户端订阅一个主题时,如果该主题有保留消息,MQTT代理会立即发送这个保留消息给客户端。客户端不需要进行任何特殊操作来接收保留消息,这是MQTT协议的标准行为。

使用保留消息的注意事项:

  • 及时更新保留消息: 如果主题的状态发生变化,应该发布一个新的保留消息来更新状态。否则,新订阅者可能会收到过时的信息。
  • 清除保留消息: 如果不再需要保留消息,可以通过发布一个空的消息体(payload为空)并将retain标志设置为true到相同的主题来清除保留消息。
  • 谨慎使用: 保留消息非常有用,但如果不当使用,可能会导致意外的行为。例如,如果客户端不期望接收旧的状态信息,但主题中存在保留消息,它们将会收到这些信息。

发布保留消息

假设我们使用paho-mqtt客户端库(Python)来发布一个保留消息。首先,确保安装了paho-mqtt:

pip install paho-mqtt

然后,发布一个保留消息的代码示例如下:

import paho.mqtt.client as mqtt

# MQTT服务器地址
broker_address = "broker.hivemq.com"
# 主题
topic = "home/livingroom/temperature"

# 创建MQTT客户端实例
client = mqtt.Client("Publisher")

# 连接到MQTT代理
client.connect(broker_address)

# 发布保留消息
# 参数:主题、消息内容、QoS、retain标志
client.publish(topic, payload="23", qos=1, retain=True)

print(f"Published retained message to {topic}")

# 断开连接
client.disconnect()

订阅并接收保留消息

下面是一个订阅者的示例,它订阅上面发布者使用的相同主题,并接收保留消息:

import paho.mqtt.client as mqtt

# MQTT服务器地址
broker_address = "broker.hivemq.com"
# 主题
topic = "home/livingroom/temperature"

# 当连接到MQTT代理时的回调函数
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(topic)

# 当接收到消息时的回调函数
def on_message(client, userdata, msg):
    print(f"Received message: {msg.payload.decode()} on topic {msg.topic} with QoS {msg.qos}")

# 创建MQTT客户端实例
client = mqtt.Client("Subscriber")

# 指定回调函数
client.on_connect = on_connect
client.on_message = on_message

# 连接到MQTT代理
client.connect(broker_address)

# 阻塞循环,以处理接收消息和重新连接等操作
client.loop_forever()

注意事项

  • 更新保留消息:如果主题的状态更新,应该发布一个新的保留消息以反映最新状态。
  • 清除保留消息:通过向相同的主题发布一个空消息(payload为空字符串)并设置retain=True,可以清除保留消息。
  • 谨慎使用:虽然保留消息功能非常有用,但在不需要旧状态信息的场景中应谨慎使用,以避免混淆和不必要的数据传输。

通过上述示例,你应该对如何在MQTT中使用保留消息有了清晰的理解。这个功能在确保新订阅者能够立即获得最新状态信息方面非常有用。

打赏赞微海报分享
mqtt payload 回调函数 科技新闻

MQTT 3.1 规范英文版

什么是 MQTT 遗嘱消息?MQTT 遗嘱消息如何运作?

猜你喜欢

改善基础设施:HiveMQ如何推动智能城市发展

改善基础设施:HiveMQ如何推动智能城市发展

08/07
2024
为什么企业选择全托管HiveMQ云进行MQTT部署

为什么企业选择全托管HiveMQ云进行MQTT部署

07/01
2024
MQTT 赋能工业 PLC 数据采集与应用

MQTT 赋能工业 PLC 数据采集与应用

06/30
2024

回复

抢沙发咯
  • 解决方案
    • 智能家居
    • 汽车与出行
    • 工业制造
    • 能源电力
    • 石油石化
    • 交通物流
    • 零售
  • 学习
    • MQTT 规范
    • MQTT 教程
    • MQTT 软件
    • MQTT 客户端库
    • MQTT 服务器
    • 工具和应用程序
  • 关于我们
    • 了解创科慧仁
    • 加入创科慧仁
    • 投资者关系
    • 新闻动态
    • 合作伙伴
    • 联系我们
  • 友情链接
    • Modbus中文网
    • 跳动符号官网
    • 物联网世界
    • RFID世界网
    • 深圳物联网协会
    • isoftstone软通动力
    • 中国发展战略学研究会
    • B.P商业伙伴
  • 在线客服
  • 全国客户服务热线
    4006909885
  • 官方公众号
  • 联系邮箱
    contact@mqtt.cn
Copyright © 2025 MQTT中文站. All rights reserved.Designed by nicetheme. 京ICP备20029519号
在线客服

微信咨询

微信咨询

4006909885

服务热线 7*24小时

电话咨询
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册
string(5) "2.0.0"