Retained 消息
Retained 消息
让我们来假设一个场景:你有一个温度传感器,它每三个小时向一个
这个时候就轮到
- 一个
Topic 只能有1 条Retained 消息,发布新的Retained 消息将覆盖老的Retained 消息; - 如果订阅者使用通配符订阅主题,它会收到所有匹配的主题上的
Retained 消息; - 只有新的订阅者才会收到
Retained 消息,如果订阅者重复订阅一个主题,也会被当做新的订阅者,然后收到Retained 消息; Retained 消息发送到订阅者时,消息的Retain 标识仍然是1 ,订阅者可以判断这个消息是否是Retained 消息,以做相应的处理。
注意:
LWT(最后遗嘱)
- Will Flag:是
1 否0 使用LWT - Will Topic:遗嘱主题名,不可使用通配符(在
CONNECT 报文中的 有效载荷 中 设置) - Will Qos:发布遗嘱消息时使用的
QoS 等级,如果遗嘱标志(Will Flag)被设置为0 ,遗嘱QoS 也必须设置为0(0x00) - Will Retain:遗嘱消息的
Retain 标识 - Will Message:遗嘱消息内容(在
CONNECT 报文中的有效载荷中设置)
Broker 检测到底层的I/O 异常;Client 未能在Keep Alive 的间隔内和Broker 之间有消息交互;Client 在关闭底层TCP 连接前没有发送DISCONNECT 数据包;Broker 因为协议错误关闭和Client 的连接,比如Client 发送了一个格式错误的MQTT 数据包。
如果
注意,设置好遗嘱以后还不够(因为你只要订阅者一启动就会收到遗嘱消息,如果此时发布者已经在线,会导致不准确