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

MQTT:消息详解

目录

  • 一、保留消息
    • 1.1 概述
    • 1.2 存储方式
    • 1.3 删除方式
    • 1.4 注意事项
  • 二、消息过期时间
  • 三、遗嘱消息
  • 四、延迟发布
  • 五、用户属性


一、保留消息

1.1 概述

普通消息:普通消息在发送之前,如果主题不存在订阅者,MQTT会直接将消息丢弃。
保留消息:保留消息可以保存在MQTT服务器中,如果有新的订阅者订阅这个主题,都会立即接收到消息,即使这个主题是在订阅之前发布的。

应用场景:

  1. 智能家居设备的状态,平时只有设备状态变更的时候才会上报,但是控制端需要再上线之后就能获取到设备状态。
  2. 传感器上报数据间隔多长,订阅者需要在订阅之后就获取最新的数据。
  3. 传感器版本号、序列号等不会经常变更的属性,上线后发布一条保留消息告知后续的所有订阅者。

1.2 存储方式

发送消息的时候选中Retain,这条消息就是一条保留消息。
在这里插入图片描述

保留消息默认的存储方式是内存存储,当服务重启之后,数据会丢失,可以在设置中修改为磁盘存储,修改完成之后需要重启服务。
在这里插入图片描述
在这里插入图片描述

1.3 删除方式

  1. 在发送保留消息的时候,发送一个空数据

在这里插入图片描述

  1. 在EMQX Dashboard中进行删除

在这里插入图片描述

  1. 设置保留消息的过期时间

在这里插入图片描述

1.4 注意事项

  1. MQTT服务器会为每一个主题保留最新的一条保留消息
  2. 在保留消息发布前订阅,将不会收到保留消息(此时收到的是一条普通消息),需要等到保留消息发布后,重新订阅主题,才会收到保留消息。

在这里插入图片描述
在这里插入图片描述

二、消息过期时间

通过设置消息的过期时间可以设置消息在多少时间段内失效,只要是在这个时间段内订阅主题,都可以接收到订阅的数据。
需要注意的是,这里需要将Qos设置成1或者是2。
在这里插入图片描述

三、遗嘱消息

通过遗嘱消息可以感知客户端是意外断开的,设置遗嘱消息步骤如下:设置遗嘱消息的主题、遗嘱消息的类型、遗嘱消息的内容以及遗嘱消息的延迟时间等。
在这里插入图片描述
当正常关闭连接时,遗嘱消息是不会触发的,只有当窗口异常关闭的情况下,遗嘱消息才会触发,例如:可以将pub在新窗口中打开,并且进行连接,然后直接关闭窗口查看sub订阅主题的状态
在这里插入图片描述

四、延迟发布

MQTT服务端收到发布者发布的消息后,会延迟一段时间之后再把消息转发给订阅者。

应用场景:

  1. 农业智能化场景:清晨或傍晚的时候执行灌溉
  2. 能源管理与自动化控制:智能家居或智能建筑中的照明、供暖、通风等。
  3. 公共设施:广告牌特定时间发放

延迟发布主题格式:$delayed/{DelayInterval}/{TopicName}
$delayed:使用$delayed作为主题前缀的消息都将被视为延迟发布的消息。
DelayInterval:延迟发布的时间间隔,单位是秒(s)。允许的最大间隔4294967秒,大约49.710266 天,如果DelayInterval不是一个整形数字,EMQX会直接丢弃该消息。
TopicName:MQTT消息的主题名称。

$delayed/15/x/y:15秒之后将MQTT消息发布到主题 x/y
$delayed/60/a/b:1分钟后将MQTT消息发布到主题a/b

首先需要再EMQX中设置延迟发布
在这里插入图片描述
在发送主题的时候增加前缀$delayed
在这里插入图片描述

五、用户属性

用户属性是MQTT5.0之后版本引入的一个新特性,允许在Publish(发布)、Subscribe(订阅)Connect(连接)等报文中携带附加信息。

应用场景:

  1. 日志记录:在发布、订阅报文中增加用户属性,可以帮助记录操作信息、操作时间、原因说明等
  2. 消息分类与标记:用户属性可以用来给消息增加标签或分类信息,如消息类型等,使得接收方能够根据这些属性进行过滤、排序或特殊处理。

发布消息的时候需要配置用户属性,点击加号(+)可以增加多个用户属性:
在这里插入图片描述
发布成功之后的消息:
在这里插入图片描述
接收成功之后的消息:
在这里插入图片描述

http://www.dtcms.com/a/316733.html

相关文章:

  • 备忘录记事本 任务清单 html
  • 基于铁头山羊STM32的平衡车电机转速开环闭环matlab仿真
  • 线性规划最优解
  • 饿了么招java开发咯
  • tarjan找SCC,缩点建DAG,找唯一源头节点
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在火焰识别的落地优化
  • 不可变集合
  • nflsoi 7.31 题解
  • 信息化项目验收,项目成功的最后确认
  • Redis中的sdshdr的len和alloc那块的知识点详解
  • 【经验记录贴】在windows系统中启动服务
  • CMU-15445(7)——PROJECT#2-BPlusTree-Task#2Task#3
  • BGA 芯片贴片加工关键注意事项
  • Fiddler 中文版实战指南,如何构建高效的 API 调试工作流?
  • 第13届蓝桥杯Scratch_选拔赛_真题2021年11月27日
  • 老旧体育场馆照明翻新:预算有限?3 步实现 “低成本升级”
  • 在具身智能火热加持下,看 2025 年机器人学术年会中的热点主题。PNP机器人展示力控、灵巧手捕捉等案例。
  • 利用链上数据进行数字资产量化因子发现
  • 计划任务:被忽视的网络与系统安全边界
  • Linux-Day10.系统安全保护web服务管理
  • 【springcloud的配置文件不生效】
  • Linux系统:基础I/O
  • 【RK3576】【Android14】Uboot下fastboot命令支持
  • 闸机控制系统从设计到实现全解析:第 4 篇:Redis 缓存与分布式锁实现
  • JavaScript 概述
  • Linux 逻辑卷管理:LVM 原理与 Stratis、VDO 特性对比
  • Vue2博客项目笔记(第一天)
  • 防御保护3-4
  • STM32CubeIDE新建项目过程记录备忘(八)使用通用定时器中断生成PWM波形
  • LINUX 85 SHElL if else 前瞻 实例