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 5.0 的消息过期间隔特性提升应用性能

如何用 MQTT 5.0 的消息过期间隔特性提升应用性能

1 年前 • MQTT 教程

在实时通讯协议 MQTT 的最新版本 5.0 中,引入了一个称为“消息过期间隔”(Message Expiry Interval)的新特性。这一功能允许消息发布者为每条消息设置一个有效期限。如果消息在服务器上停留的时间超过了这个期限,它就不会被分发给任何订阅者。这意味着,当消息的内容不再相关或有用时,它会被自动清理,从而优化了网络资源的使用和提高了通信的效率。

什么是消息过期间隔?

消息过期间隔定义了一个消息从被发布起,到它变得不再可分发为止的时间长度。在 MQTT 协议中,这是通过在消息中设置一个特定的“过期间隔”值来实现的。默认情况下,消息不设置过期间隔,即视为永不过期。但在某些场景下,设定一个合理的过期时间可以显著提高数据传输的效率和实时性。

应用场景

时间敏感的信息

例如,一个促销活动仅在接下来的两小时内有效。如果消费者在活动结束后才收到这个消息,那么这个消息就失去了它的价值。

状态更新

考虑到实时交通信息的更新,如道路拥堵情况。随着时间的推移和交通流量的变化,过时的拥堵信息就不再有参考价值。

自动管理保留消息

在 MQTT 中,保留消息功能允许新的订阅者接收到他们订阅主题的最后一条消息。通过设置消息的过期间隔,可以避免过时的保留消息长时间占用服务器资源。

实例演示

假设有一个联网汽车应用场景,其中包括发送实时交通状况和路口信号灯配时建议。通过设置消息的过期间隔,可以确保车辆只接收到当前位置附近的、时效性强的信息。

设置消息过期间隔的操作步骤

要演示消息过期间隔的代码示例,我们可以使用 Python 和 paho-mqtt 库,这是一个常用于 MQTT 客户端开发的库。下面的示例将分为两部分:发布者(Publisher)和订阅者(Subscriber)。

安装 paho-mqtt

首先,确保你已经安装了 paho-mqtt。如果没有安装,可以通过 pip 安装:

pip install paho-mqtt

发布者(Publisher)

发布者将发送两条消息,一条设置了5秒的过期间隔,另一条设置了60秒。

import time
import paho.mqtt.client as mqtt

# MQTT 服务器地址
MQTT_HOST = "test.mosquitto.org"
MQTT_PORT = 1883
MQTT_TOPIC = "mqttx/demo/message_expiry"

def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")

client = mqtt.Client()
client.on_connect = on_connect

client.connect(MQTT_HOST, MQTT_PORT, 60)

# 发送第一条消息,设置5秒过期间隔
client.publish(MQTT_TOPIC, payload="This message will expire in 5 seconds.", qos=1, properties={'message_expiry_interval': 5})
print("Published message with 5 seconds expiry.")

# 发送第二条消息,设置60秒过期间隔
client.publish(MQTT_TOPIC, payload="This message will expire in 60 seconds.", qos=1, properties={'message_expiry_interval': 60})
print("Published message with 60 seconds expiry.")

# 断开连接
client.disconnect()

订阅者(Subscriber)

订阅者订阅同一个主题,并处理接收到的消息。

import paho.mqtt.client as mqtt

# MQTT 服务器地址
MQTT_HOST = "test.mosquitto.org"
MQTT_PORT = 1883
MQTT_TOPIC = "mqttx/demo/message_expiry"

def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
    client.subscribe(MQTT_TOPIC)

def on_message(client, userdata, msg):
    print(f"Received message: {msg.payload.decode()} on topic {msg.topic}")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(MQTT_HOST, MQTT_PORT, 60)

client.loop_forever()

运行示例

  1. 运行订阅者代码:首先启动订阅者客户端,让它在后台运行并监听指定主题的消息。
  2. 运行发布者代码:然后运行发布者代码,发送两条带有不同过期间隔的消息。

你将看到订阅者只接收到在其过期间隔内的消息。如果你在发布后立刻运行订阅者,两条消息都可能被接收。但如果在5秒后再启动订阅者,只有设置了60秒过期间隔的消息会被接收,因为另一条消息已经过期。

这个演示说明了如何在MQTT 5.0中使用消息过期间隔功能,以及它如何影响消息的传递和接收。

通过这个例子,我们可以清楚地看到消息过期间隔如何在实际应用中起作用,以确保信息的实时性和相关性。

总结

消息过期间隔是 MQTT 5.0 提供的一个非常实用的特性,它帮助开发者和企业确保消息的时效性,同时减轻服务器的负担,并优化资源使用。无论是在实时交通信息、促销活动通知,还是在智能家居和工业物联网应用中,适当使用消息过期间隔都能带来显著的效益。

在设计和实现基于 MQTT 协议的通信系统时,合理利用消息过期间隔不仅可以提高信息传输的效率,还能增强用户体验,确保用户及时获取最重要和最相关的信息。同时,它还减少了网络带宽的浪费,优化了服务器存储资源的使用,使得系统更加高效和可靠。

打赏赞微海报分享
mqtt 科技新闻

MQTT 5.0 Reason Code 深入解析:故障排除与更精细的错误处理

MQTTnet库在.NET环境中发布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"