当前位置: 首页 > article >正文

MQTT Retain / Last Will / Clean Session 深度解析:智能设备在线状态设计

目录一、设备在线状态的本质问题二、Retain:设备状态快照机制1 Retain 的基本原理2 Retain 的作用3 Retain 在设备在线状态中的作用4 Retain 删除机制三、Last Will:设备异常离线检测机制1 Last Will 的基本概念2 什么是异常断开3 Last Will 消息流程4 Last Will 在设备状态设计中的价值四、Clean Session:设备会话恢复机制1 Clean Session = true2 Clean Session = false3 Session 恢复流程五、设备在线状态完整设计设备上线流程设备异常断线新客户端订阅六、智能设备在线状态架构状态数据结构建议七、智能锁设备在线设计实例八、设备状态设计常见踩坑坑一:没有使用 Will坑二:没有使用 Retain坑三:Clean Session 配置错误坑四:状态 Topic 混乱坑五:Retain 使用过多九、企业级 IoT 平台最佳实践十、主流 MQTT Broker 支持总结在基于 MQTT 的物联网系统中,设备在线状态(Device Presence)是最基础却最容易设计错误的一部分。 很多 IoT 平台在实际运行中会出现:设备已经断电,但平台仍显示在线设备重新上线,但 APP无法立即获取状态网络波动导致设备频繁上下线新客户端订阅后无法知道设备当前状态这些问题的根本原因往往不是网络,而是MQTT 三个关键机制没有正确设计:机制作用Retain保存设备最新状态Last Will设备异常离线通知Clean Session设备断线后的会话管理这三者组合起来,才能构建可靠的设备在线状态体系。本文将从协议原理、状态模型、消息流程、系统架构以及智能设备实战设计五个层面进行深度解析。一、设备在线状态的本质问题在 IoT 系统中,“在线状态”并不是一个简单字段,而是一个动态状态推断问题。设备状态通常有三种:状态含义Online设备正常连接 BrokerOffline设备主动或异常断线Unknown系统无法确定在传统系统中,状态更新通常依赖:设备定期上报 heartbeat但在 IoT 场景中存在问题:设备断电无法上报网络异常导致误判心跳周期太短会增加流量因此 MQTT 提供协议级状态管理机制。二、Retain:设备状态快照机制1 Retain 的基本原理在 MQTT 中,消息可以带有retain 标志。当 Publisher 发送:PUBLISH retain=trueBroker 会保存该 Topic 的最后一条消息。当新的客户端订阅该 Topic:Broker 会立即发送这条 Retain 消息。2 Retain 的作用Retain 的核心价值是:保存当前状态而不是历史数据。例如:device/lock123/status消息:{ "status":"online" }如果设置:retain = true那么任何新客户端订阅:device/lock123/status都会立即收到当前状态。3 Retain 在设备在线状态中的作用如果没有 Retain:APP 启动时会出现问题:APP subscribe ↓ 没有消息 ↓ 无法判断设备状态使用 Retain 后:APP subscribe ↓ Broker 返回最后状态 ↓ APP立即获得设备状态4 Retain 删除机制Retain 消息可以通过发送空消息删除:payload = "" retain = trueBroker 将清除该 Topic 的 Retain 消息。三、Last Will:设备异常离线检测机制1 Last Will 的基本概念Last Will(遗嘱消息)是 MQTT 的一个异常断线通知机制。当客户端连接时,可以设置:Will Topic Will Payload如果客户端:异常断开Broker 会自动发布该消息。2 什么是异常断开异常断开包括:设备断电WiFi掉线程序崩溃网络中断Broker 没有收到:

相关文章:

MQTT Retain / Last Will / Clean Session 深度解析:智能设备在线状态设计

目录 一、设备在线状态的本质问题 二、Retain:设备状态快照机制 1 Retain 的基本原理 2 Retain 的作用 3 Retain 在设备在线状态中的作用 4 Retain 删除机制 三、Last Will:设备异常离线检测机制 1 Last Will 的基本概念 2 什么是异常断开 3 Last Will 消息流程 4…...

linux2.6.28 MTD 内存技术设备(块设备)platform driver源码分析

//////////////////////drivers/mtd/nand/s3c_nand.c module_init(s3c_nand_init);//模块初始化 static int __init s3c_nand_init(void) { printk(“S3C NAND Driver, © 2008 Samsung Electronics\n”); platform_driver_register(&s3c6400_nand_driver); platform_d…...

Docker Compose编排LPG日志栈:从单机到多机的实战避坑指南

1. 为什么选择LPG日志栈? 在分布式系统时代,日志管理就像在迷宫里找钥匙。传统的ELK方案虽然功能强大,但资源消耗让人肉疼。LPG(LokiPromtailGrafana)组合就像是为云原生环境量身定制的瑞士军刀,我用它处理…...

VisionPro实战:如何在ToolBlock中高效处理List类型输出(附完整代码)

VisionPro高效数据处理:ToolBlock中List类型的实战应用 在工业视觉检测领域,处理多个产品的坐标数据是常见需求。VisionPro作为行业领先的机器视觉开发平台,其ToolBlock功能提供了强大的自定义数据处理能力。本文将深入探讨如何利用List类型在…...

Rancher与Azure AKS集成:微软云环境下的容器管理方案

Rancher与Azure AKS集成:微软云环境下的容器管理方案 【免费下载链接】rancher Complete container management platform 项目地址: https://gitcode.com/GitHub_Trending/ra/rancher 在当今多云和混合云架构盛行的时代,企业需要一个统一的平台来…...

OpenClaw(大龙虾)Windows 彻底卸载清理教程(无残留)

很多朋友安装了OpenClaw(圈内俗称「大龙虾」)后,常会遇到这些糟心问题:想换版本重装,却发现旧配置阴魂不散;只删了安装文件夹,后台服务还在偷偷开机自启;终端敲openclaw命令依然能用,甚至重装后直接报错端口被占用…… 究其根本,是OpenClaw在Windows系统中分为CLI命…...

Linux网络编程:UDP 的DictServer

1、数据字典字典,那我们是不是需要一个txt文件里面包含了我们用来测试字典的数据?我们创建一个data.txt文件,从中添加一系列格式为英文:中文的测试用例:随便写几个测试用例就行了。2、字典类与头文件我们先写出一个字典…...

探索MS-DOS源代码中的栈帧布局与函数调用规范:从16位汇编看系统设计

探索MS-DOS源代码中的栈帧布局与函数调用规范:从16位汇编看系统设计 【免费下载链接】MS-DOS MS-DOS 1.25和2.0的原始源代码,供参考使用 项目地址: https://gitcode.com/GitHub_Trending/ms/MS-DOS MS-DOS作为早期个人计算机的标志性操作系统&…...

【Pytorch + SpringBoot + Flask + Vue】基于YOLOv12 火灾烟雾检测系统(源码)

一、项目背景火灾是威胁人民生命财产安全的主要灾害之一,具有突发性强、蔓延速度快、扑救难度大等特点。据应急管理部消防救援局统计,2023年全国共接报火灾89.5万起,直接财产损失达67.5亿元。在各类火灾事故中,因发现不及时、报警…...

程序员如何优化生活习惯避免感冒:生活医学视角下的免疫系统守护指南

程序员如何优化生活习惯避免感冒:生活医学视角下的免疫系统守护指南 专栏链接:匠身颐和 作者:培风图南以星河揽胜 引言:当你的代码在运行,而免疫系统却“宕机”了 凌晨 2:47,你刚修复了一个棘手的分布式事…...

Vue3 新 AI 调试神器(来自 React 生态)!

经常用 AI 写前端的同学,一定都有过这种无力感:你想让 AI 改一个页面元素,却只能说——“右上角那个按钮…”、“中间那个卡片…”但问题是:AI 根本不知道你在说哪个元素。于是你只能截图、标注、翻代码、来回试错,效率…...

Jitsi Meet静态资源优化:CDN配置与缓存策略终极指南

Jitsi Meet静态资源优化:CDN配置与缓存策略终极指南 【免费下载链接】jitsi-meet Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application. 项目地址: https://gitcode.com/GitHub_Tren…...

Rancher蓝绿部署方案:降低容器应用发布风险的高级策略

Rancher蓝绿部署方案:降低容器应用发布风险的高级策略 【免费下载链接】rancher Complete container management platform 项目地址: https://gitcode.com/GitHub_Trending/ra/rancher Rancher作为企业级Kubernetes管理平台,提供了强大的蓝绿部署…...

从理论到实践:空间光耦合单模光纤的匹配度计算与优化

1. 空间光耦合单模光纤的核心挑战 第一次接触空间光耦合单模光纤时,我被那个复杂的积分公式吓到了——贝塞尔函数、重叠积分、电场分布,这些术语堆在一起简直像天书。但后来发现,工程师真正需要的是能直接指导设计的实用方法。想象你正在设计…...

当社交技能缺乏时,如何运用ADHD运动干预提高专注力?

社交技能缺乏背景下的ADHD运动干预策略 在面对社交技能缺乏的情况下,利用ADHD运动干预是一种有效的策略。通过团体运动,学生不仅能提高身体素质,还能增强与同伴的互动能力。比如,参与集体体育活动时,他们需要协作和交流…...

计算机毕业设计之django停车场管理系统

本系统为用户而设计制作停车场管理系统,旨在实现停车场智能化、现代化管理。本停车场管理自动化系统的开发和研制的最终目的是将停车场的运作模式从手工记录数据转变为网络信息查询管理,从而为现代管理人员的使用提供更多的便利和条件。使停车场管理系统…...

搞技术创作的你,是不是也卡在了“发布”这一步?

昨天在调试一个分布式事务的案例,写了三个小时,自认为逻辑清晰、代码可跑、注释到位。结果点击发布,页面转了几圈,弹出来两个字:审核。然后就是漫长的等待。六小时、八小时、十二小时。文章卡在后台,发布时…...

计算机毕业设计之jsp社区住户交流报修管理系统设计与实现

社区住户交流报修管理系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。与安卓,iOS相比较起来&…...

HMCL启动器资源包管理完全指南:从入门到精通

HMCL启动器资源包管理完全指南:从入门到精通 【免费下载链接】HMCL huanghongxun/HMCL: 是一个用于 Minecraft 的命令行启动器,可以用于启动和管理 Minecraft 游戏,支持多种 Minecraft 版本和游戏模式,可以用于开发 Minecraft 插件…...

kafka怎么处理消息一致性

在 Kafka 里,“消息一致性”一般分三层看:生产一致性、存储一致性、消费一致性。Kafka 自身默认是“至少一次”,需要配合 幂等生产者 事务 幂等消费者/业务设计 才能做到“业务上看起来恰好一次”。一、生产端:怎么保证“消息一…...

消息队列消息堆积处理

一、先止血:防止继续堆限流或降级生产端网关/业务对产生消息的接口限流非核心异步任务(日志、埋点、统计)先降级或关掉临时扩容消费者快速多开几份同样的消费服务实例适当调大每个实例的消费线程数(注意别把 DB/下游打挂&#xff…...

如何查看ollama中模型的运行情况

文章目录 1️⃣ 查看当前正在运行/加载的模型 (最常用) 2️⃣ 查看所有已下载的本地模型列表 3️⃣ 通过 API 探针获取详细运行时信息 查看特定模型的详细信息 查看所有可用模型(API 版本的 list) 4️⃣ 监控系统级资源消耗 (性能分析) 监控 GPU 使用情况 (NVIDIA) 监控 CPU …...

细说 Kafka Partition 分区

Partition(分区)是 Kafka 的核心角色,对于 Kafka 的存储结构、消息的生产消费方式都至关重要。 掌握好 Partition 就可以更快的理解 Kafka。本文会讲解 Partition 的概念、结构,以及行为方式。 一、Events, Streams, Topics 在…...

Ubuntu 24.04 LTS 上 Ollama 本地大模型优化实践(R730xd 实战)

文章目录 Ubuntu 24.04 LTS 上 Ollama 本地大模型优化实践(R730xd 实战) 一、背景 二、硬件特点分析 CPU 内存 三、核心优化思路 四、模型选择与量化 推荐模型规模 量化策略 五、Modelfile 固化参数(关键) 为什么要用 Modelfile? 正确方式 关键说明 六、CPU 优化 1. 性能模…...

**绿色AI:用Python实现轻量级模型压缩与能耗优化的实践探索**在人工智能快速发展的今天,模型体积

绿色AI:用Python实现轻量级模型压缩与能耗优化的实践探索 在人工智能快速发展的今天,模型体积大、推理耗能高已成为制约其落地的重要瓶颈。尤其在边缘设备和移动场景中,“绿色AI”——即低功耗、高效率的AI部署方式——正逐渐成为开发者关注的…...

Anthropic工程师亲述:打造Claude Code,我学会了“像Agent一样思考”

大家好,今天分享一篇AI圈近期很火的实战干货——来自Anthropic核心工程师Thariq Shihipar(trq212)的深度复盘,主题是《Lessons from Building Claude Code: Seeing like an Agent》(《构建Claude Code的经验&#xff1…...

**标题:发散创新:基于Python的多模态融合实践——从图像到文本的跨域语义对齐**在人工智能快速发展的今天,**

标题:发散创新:基于Python的多模态融合实践——从图像到文本的跨域语义对齐 在人工智能快速发展的今天,多模态融合已成为提升模型理解能力的关键路径之一。不同于单一模态的数据处理方式(如仅用图像或仅用文本)&#x…...

STM32智能灯光控制实战:红外+语音+按键三合一方案(附完整代码)

STM32智能灯光控制实战:红外语音按键三合一方案(附完整代码) 在智能家居领域,灯光控制系统正经历着从单一控制向多模态交互的演进。传统方案往往局限于单一控制方式,而现代用户期望的是能够根据场景自由切换的无缝体验…...

基于爬山搜索法的风力发电MPPT控制Simulink仿真探究

基于爬山搜索法的风力发电MPPT控制Simulink仿真模型,包括定步长与变步长算法,变步长仿真效果更好,发电机采用的是永磁同步发电机,在风速改变情况下,变步长跟踪的速度更快、偏差更小。在风力发电系统中,最大…...

我用 AI 生成测试用例,效率提升 3 倍但发现了这 5 个问题

专栏:《AI 测试实战手册》第 5 篇 作者:一线测试工程师 适合人群:手工测试转型、自动化测试提效、测试人搞副业开篇:真实项目案例 这是我上个月在一个电商项目中的真实经历。 项目背景: 新上线一个会员积分系统需求文档…...