系列文章目录
系列文章目录
第一章 总体概述
第二章 在实体机上安装ubuntu
第三章 Windows远程连接ubuntu
第四章 使用Docker安装和运行EMQX
第五章 Docker卸载EMQX
第六章 EMQX客户端MQTTX Desktop的安装与使用
第七章 EMQX客户端MQTTX CLI的安装与使用
第八章 Wireshark工具的安装与使用
第九章 MQTT报文
第十章 MQTT消息质量等级QoS
第十一章 MQTT主题
第十二章 MQTT会话
第十三章 MQTT消息
文章目录
- 系列文章目录
- 前言
- 一、保留消息
- 1.保留消息简介
- 2.保留消息的使用
- 3.保留消息的存储方式
- 4.保留消息的删除方式
- 总结
前言
一、保留消息
1.保留消息简介
普通消息:普通消息在发送之前其所对应的主题如果不存在订阅者,普通消息MQTT服务器会直接将其丢弃。
保留消息:保留消息可以保留在 MQTT 服务器中。任何新的订阅者订阅与该保留消息中的主题匹配的主题时,都会立即接收到该消息,即使这个消息是在它们订阅主题之前发布的。
如下图,当客户端订阅主题时,如果服务端存在该主题匹配的保留消息,则该保留消息将被立即发送给该客户端。
保留消息的常见使用场景:
1、智能家居设备的状态只有在变更时才会上报,但是控制端需要在上线后就能获取到设备的状态;
2、传感器上报数据的间隔太长,但是订阅者需要在订阅后立即获取到最新的数据;
3、传感器的版本号、序列号等不会经常变更的属性,可在上线后发布一条保留消息告知后续的所有订阅者;
2.保留消息的使用
发布保留消息
在发布消息的时候将Retained 标记被设置为 true
,则该消息即是 MQTT 中的保留消息(Retained Message)。
注意事项:
1、可以通过Dashboard查看保留消息
2、MQTT 服务器会为每个主题存储最新一条保留消息
3、在保留消息发布前订阅主题,将不会收到保留消息。需要待保留消息发布后,重新订阅该主题,才会收到保留消息。
3.保留消息的存储方式
保留消息的存储方式:内存存储(默认存储类型)、磁盘存储
5、保留消息虽然存储在服务端中,但它并不属于会话的一部分。也就是说,即便发布这个保留消息的会话已结束,保留消息也不会被删除。
4.保留消息的删除方式
1、客户端往某个主题发送一个 Payload 为空的保留消息,服务端就会删除这个主题下的保留消息;
2.在 MQTT 服务器上删除,比如 EMQX MQTT 服务器提供了在 Dashboard 上删除保留消息的功能;
3.MQTT 5.0 新增了消息过期间隔属性,发布时可使用该属性设置消息的过期时间,将会在过期时间后自动被删除。