接前一篇文章:MQTT遗嘱信息(1)
本文内容参考:
什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?_mqtt last will-CSDN博客
MQTT 协议学习:Retained(保留消息) 与 LWT(最后遗嘱)
特此致谢!
4. 设置和处理遗嘱消息
在MQTT中,设置和处理遗嘱消息涉及两个角色:发布者(客户端)和订阅者。
- 设置遗嘱消息
作为MQTT客户端的发布者,可以通过以下步骤设置遗嘱消息:
1)创建连接
使用MQTT客户端库或工具创建与MQTT代理(Broker)的连接。
2)设置遗嘱消息选项
在建立连接时,设置遗嘱消息的主题、负载、QoS级别和保留选项。这些选项通常通过客户端库的API或配置文件进行设置。
3)连接到代理
使用客户端库的连接功能连接到MQTT代理。
一旦客户端与代理建立连接,代理将会记录客户端的遗嘱消息设置。如果客户端在之后异常断开连接,代理将自动发布遗嘱消息给其他订阅者。
- 处理遗嘱消息
作为MQTT客户端的订阅者,可以通过以下步骤处理遗嘱消息:
1)创建连接
使用MQTT客户端库或工具创建与MQTT代理的连接。
2)使用订阅功能订阅遗嘱消息的主题
通常,订阅主题与发布者设置的遗嘱消息主题相对应。
3)接收遗嘱消息
一旦成功订阅主题,订阅者将接收到发布者的遗嘱消息。根据需要,可以处理遗嘱消息中的负载数据或执行相应的操作。
订阅者可以根据实际需求对接收到的遗嘱消息进行解析和处理,以满足特定的业务逻辑和应用需求。
5. 遗嘱消息底层机制
前文已提到,LWT全称为Last Will and Testament,也就是我们在连接到Broker时提到的遗嘱,包括遗嘱主题、遗嘱 QoS、遗嘱消息等。顾名思义,当Broker检测到Client非正常地断开连接的时候,就会向遗嘱主题里面发布一条消息。遗嘱相关的设置是在建立连接的时候,在CONNECT数据包里面的Variable header(可变头)与 Payload(有效载荷)中指定的。
-
Will Flag
是1否0使用LWT。
-
Will Topic
遗嘱主题名,不可使用通配符(在CONNECT报文中的有效载荷中设置)。
-
Will Qos
发布遗嘱消息时使用的QoS等级,如果遗嘱标志(Will Flag)被设置为0,遗嘱QoS也必须设置为0(0x00)。
-
Will Retain
遗嘱消息的Retain标识。
-
Will Message
遗嘱消息内容(在 CONNECT报文中的有效载荷中设置)。
Broker在以下情况下认为Client是非正常断开连接的:
-
Broker检测到底层的I/O异常;
-
Client未能在Keep Alive的间隔内和Broker之间有消息交互;
-
Client在关闭底层TCP连接前没有发送DISCONNECT数据包(如果Client通过发布 DISCONNECT数据包断开连接,这个属于正常断开连接,不会触发LWT的机制,同时,Broker还会丢弃掉这个 Client 在连接时指定的LWT参数);
-
Broker因为协议错误关闭和Client的连接,比如Client发送了一个格式错误的MQTT数据包。
总结
MQTT遗嘱消息是一项强大而灵活的功能,为物联网和传感器网络提供了可靠的通信机制。通过合理配置和利用遗嘱消息,可以实现实时状态通知、可靠的离线处理、资源管理和信息传递等多种应用场景。在设计和实现MQTT系统时,考虑到遗嘱消息的设置和处理,可以提高系统的可靠性、弹性和可管理性。