【第二章10】 MQTT 保留消息
一、MQTT 保留消息简介一、基础概念对比‌普通消息‌如果消息发布时对应的主题下没有任何订阅者MQTT服务器会直接将这条消息丢弃不会做任何留存。‌保留消息‌这类消息会被保存在MQTT服务器中后续任何新的订阅者订阅和该保留消息主题匹配的主题时都会立刻收到这条消息——哪怕这条消息是在订阅者发起订阅之前就已经发布的。文档中也通过示意图演示了这个流程发布者在10:00向主题sensor/t1发布消息服务器将这条消息存入保留消息存储区当客户端在11:00订阅sensor/t1主题时服务器会立刻将这条历史保留消息推送给客户端。二、典型使用场景文档中列举了3个非常实用的落地场景‌智能家居状态同步‌智能家居设备仅在状态发生变更时才上报数据控制端上线后可以直接通过保留消息获取设备的最新状态不需要等待设备下一次状态上报。‌传感器数据即时获取‌部分传感器上报数据的间隔很长新的订阅者发起订阅后不需要等待传感器下一次上报就能立刻拿到最新的传感器数据。‌静态属性分发‌传感器的版本号、序列号这类几乎不会变更的属性设备上线后发布一条保留消息后续所有订阅该主题的新客户端都可以直接获取到这些属性信息。MQTT保留消息是MQTT协议中用于解决“新订阅者无法立即获取主题最新状态”问题的核心特性它和之前介绍的离线消息缓存、持久会话是完全独立的机制即使发布消息的客户端会话已经结束保留消息也不会被自动删除。二、认识MQTT 保留消息核心定义保留消息是发布时将Retained标志设置为true的普通MQTT消息MQTT服务端会为每个主题单独存储最新的一条保留消息。当新的客户端订阅该主题或匹配该主题的通配符主题时服务端会立即将这条保留消息推送给订阅者无需等待发布者下一次主动发消息。核心特性单主题单缓存每个主题最多仅存储1条保留消息新发布的同主题保留消息会直接覆盖旧的内容始终保留该主题的“最后已知有效状态”独立于会话保留消息不属于任何客户端的持久会话发布该消息的客户端断开连接、会话过期销毁后保留消息依然会保存在服务端订阅即推送只有在保留消息发布之后才发起订阅的客户端才能收到这条保留消息提前订阅的客户端不会自动收到已存在的保留消息需要取消订阅后重新订阅才能获取QoS兼容保留消息的存储逻辑不受消息QoS等级影响即使是QoS 0等级的消息只要设置了Retain标志也会被服务端存储典型使用场景智能家居场景设备仅在状态变更时上报数据用户打开控制App订阅设备状态主题后能立刻获取设备当前的在线/离线、开关状态无需等待设备下一次主动上报低频次传感器场景温湿度、定位传感器上报间隔长达数小时新接入的监控端订阅后可直接拿到最新的采集数据不用长时间等待静态属性同步场景传感器固件版本、设备序列号这类几乎不会变更的属性发布为保留消息后后续所有新接入的订阅者都能直接获取无需重复发布发布与删除操作‌发布保留消息‌几乎所有MQTT客户端库都提供了对应参数发布消息时将retainFlag设置为true即可比如ESP8266的PubSubClient库中调用publish(topic, payload, true)就能发布保留消息‌删除保留消息‌最通用的方式是向目标主题发布一条0字节负载的保留消息服务端收到后会自动删除该主题下的保留消息部分服务端还支持在管理后台手动删除MQTT 5.0版本还可以通过设置消息过期间隔让保留消息到期后自动销毁常见配置说明以主流的EMQX服务端为例支持灵活配置保留消息的运行规则存储方式可选内存存储或内存磁盘持久化存储持久化模式下服务端重启后保留消息不会丢失可设置最大存储条数、单条消息最大负载大小超出限制的普通保留消息会被当作非保留的普通消息处理支持配置保留消息派发速率避免订阅者匹配大量通配符主题时一次性收到过多保留消息导致内存溢出三、如何发布和删除MQTT保留消息发布和删除MQTT保留消息的操作可以分为客户端侧通用配置、主流工具实操演示、服务端侧管理操作三个部分覆盖不同使用场景的需求一、通用发布规则发布保留消息的核心操作非常简单在调用MQTT客户端的发布接口时将消息的Retained标志设置为true即可。服务端会自动为该主题存储这条最新的保留消息后续新订阅该主题的客户端会立刻收到这条消息新发布的同主题保留消息会直接覆盖旧的内容每个主题最多仅保留1条有效保留消息保留消息不受QoS等级限制即使是QoS 0等级的消息只要设置了Retain标志就会被服务端存储二、主流工具发布实操‌MQTTX 桌面客户端‌创建好MQTT连接后在消息输入区域勾选界面上的「Retain」复选框填写目标主题和消息内容后点击发送即可完成保留消息发布。‌MQTTX CLI 命令行工具‌执行以下命令即可发布保留消息示例中向主题t/1发布指定内容的保留消息mqttx pub-tt/1-mA retained message from MQTTX CLI--retaintrue-hlocalhost-p1883‌Mosquitto 命令行工具‌使用mosquitto_pub命令添加-r参数即可发布保留消息mosquitto_pub-r-q1-ta/b/c-mhello三、删除保留消息的多种方式‌客户端主动发布空保留消息‌这是协议层面通用的删除方式向目标主题发布一条Payload长度为0的保留消息服务端收到后会自动删除该主题下的保留消息。以MQTTX CLI为例执行以下命令即可完成删除mqttx pub-tt/1-m--retaintrue-hlocalhost-p1883‌MQTT 5.0 自动过期删除‌在发布保留消息时通过MQTT 5.0新增的「消息过期间隔」属性设置消息的有效时长到期后服务端会自动清理这条保留消息无需手动操作。‌服务端管理后台手动删除‌以EMQX服务端为例在Dashboard的「监控 - 保留消息」页面可以查看所有已存储的保留消息直接选中指定主题的消息点击删除即可还支持通过REST API批量删除保留消息。‌服务端配置规则自动清理‌可以在服务端配置保留消息的全局有效期设置后所有未单独指定过期时间的保留消息达到配置的时长后会被自动回收清理。三、如何通过REST API批量删除MQTT保留消息以主流的EMQX MQTT服务端为例通过REST API批量删除保留消息的完整操作流程如下前置准备确认EMQX服务已开启REST API服务默认API端口为8081可在服务端配置文件中确认端口与访问权限设置提前获取EMQX的API访问凭证默认管理员账号密码为admin/public需提前在Dashboard中完成账号配置核心批量删除操作EMQX提供了原生的保留消息批量删除API无需额外编写复杂脚本即可完成全量或指定范围的清理‌删除集群所有保留消息‌向EMQX的管理API地址发送DELETE请求即可一次性清空集群中所有存储的保留消息示例请求如下curl-uadmin:public-XDELETEhttp://你的EMQX服务地址:8081/api/v5/retained/messages请求执行成功后会返回操作成功的状态码集群内所有节点上的保留消息都会被同步清除。‌按主题筛选批量删除‌如果不需要清空全部保留消息可先调用GET请求获取所有保留消息的主题列表通过通配符筛选出需要删除的目标主题再循环调用单条保留消息删除接口完成批量清理第一步获取全量保留消息列表curl-uadmin:publichttp://你的EMQX服务地址:8081/api/v5/retained/messages返回结果中会包含所有保留消息的主题、QoS、发布时间等完整信息。第二步筛选出需要删除的主题后调用单条删除接口指定主题URL编码后传入即可删除对应保留消息可通过脚本循环执行实现批量删除curl-uadmin:public-XDELETEhttp://你的EMQX服务地址:8081/api/v5/retained/messages/URL编码后的目标主题注意事项执行全量删除前建议先调用GET接口导出保留消息列表做备份避免误删需要保留的状态数据如果EMQX开启了保留消息的磁盘持久化存储API删除操作会同时清理内存和磁盘上的对应数据无需额外重启服务部分第三方MQTT服务端的REST API实现可能存在差异可参考对应服务端的官方API文档调整请求路径和鉴权方式。

相关新闻

控制柜机房可视化监控管理平台方案

控制柜机房可视化监控管理平台方案

某工厂焙烧车间现场部署有一套PLC控制系统,受到环境影响,时常出现高温降容、凝露故障等问题,设备运维成本与人工工作量颇高。现在建设一套控制柜机房,将PLC控制柜移至机房的同时,加装专用空调实现恒温、散热与除湿&…

2026/7/31 22:20:01 阅读更多 →
【第二章09】MQTT会话

【第二章09】MQTT会话

MQTT 会话是 MQTT 协议中用于维持客户端与服务端之间通信状态的核心机制,它不局限于网络连接存活的时间段内,还可以在客户端和服务端的多次连续网络连接之间延续,以此保障网络波动场景下的通信连续性,避免消息丢失、重复订阅等问题…

2026/7/31 22:20:01 阅读更多 →
【物联网基础02】了解TCP/IP协议族

【物联网基础02】了解TCP/IP协议族

TCP/IP协议族并非单一的两个协议,而是一套由上百个分层协作的协议共同组成的互联网核心通信体系,它是实现不同厂商、不同操作系统、不同物理网络设备之间互联互通的通用标准,从诞生之初就被设计用来解决异构网络的互联问题,是现代…

2026/7/31 22:20:01 阅读更多 →

最新新闻

FilterKit与GPUImage:iOS图像处理框架对比分析

FilterKit与GPUImage:iOS图像处理框架对比分析

FilterKit与GPUImage:iOS图像处理框架对比分析 【免费下载链接】FilterKit iOS Framework for easily adding Camera with Filters 项目地址: https://gitcode.com/gh_mirrors/fi/FilterKit 在iOS应用开发中,图像处理功能已成为提升用户体验的关键…

2026/7/31 22:58:13 阅读更多 →
儿童感统失调的表现与家庭训练指南

儿童感统失调的表现与家庭训练指南

1. 为什么孩子总被误解为"故意作对"?很多家长都有这样的困惑:明明已经反复叮嘱孩子要认真听讲、专心做事,可他们还是频繁走神、动作拖拉、学习效率低下。面对这种情况,大多数家长的第一反应往往是"这孩子怎么这么不…

2026/7/31 22:58:13 阅读更多 →
特斯拉Optimus人形机器人能源系统技术解析

特斯拉Optimus人形机器人能源系统技术解析

1. 特斯拉Optimus的能源解决方案解析当Optimus人形机器人在特斯拉AI Day上完成那段令人印象深刻的行走演示时,很多人可能没注意到一个关键细节——这台身高1.72米、体重73公斤的机器人,其能源系统采用了与特斯拉电动车同源的电池技术。这种设计选择背后&…

2026/7/31 22:58:13 阅读更多 →
3M文字转语音工具:核心技术解析与实战应用

3M文字转语音工具:核心技术解析与实战应用

1. 项目概述:3M文字转语音工具的核心价值去年帮朋友制作有声书时,我试用了市面上17款TTS工具后,最终锁定这款3M文字转语音神器。它最吸引我的不是"永久免费"的标签,而是其工业级的语音自然度——在盲测中,80…

2026/7/31 22:58:13 阅读更多 →
匠心时刻丨MindStudio-MemScope片上内存调优实战指南

匠心时刻丨MindStudio-MemScope片上内存调优实战指南

NPU内存持续劣化、内存占用居高不下,该如何有效优化?NPU内存资源本就十分宝贵,但不少开发者往往难以掌握真实内存使用状态:不清内存资源的消耗去向,无法定位OOM报错根因,也缺少系统化的调优手段。针对以上痛…

2026/7/31 22:58:13 阅读更多 →
嵌入式调试技术未来展望:从 printf 到 AI 辅助根因分析的演进路径与实现设想

嵌入式调试技术未来展望:从 printf 到 AI 辅助根因分析的演进路径与实现设想

嵌入式调试技术未来展望:从 printf 到 AI 辅助根因分析的演进路径与实现设想 一、调试技术现状:printf 的统治与 JTAG 的困境 打开任何一个嵌入式项目仓库,你大概率会在源码中看到这样的代码片段:printf("[DEBUG] sensor_v…

2026/7/31 22:57:12 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻