MQTT——遗嘱信息
遗愿标志(Will Flag)
正常断开链接 :如果客户端正常断开连接,会向服务器发送DISCONNECT报文,服务端接收到该报文后,就会知道,客户端是正常断开连接,而并非意外断开连接。
意外断开连接:通过心跳机制发现 (客户端未向服务器发送DISCONNECT报文)。
当服务端发现某一客户端发生了意外断开,服务端就会向订阅了该客户端遗嘱信息的客户端发布遗嘱信息。
遗嘱信息内容在CONNECT报文中由四部分组成:
主题lastWillTopic;
Qos等级lastWillQos;
消息内容lastWillMessage;
保留标志 lastWillRetain : 设置为真,客户端订阅后马上就会收到设置的遗嘱信息;设置为假的话,发布遗嘱信息的客户端发生意外断开之后,订阅了该客户端遗嘱信息的客户端才可收到遗嘱消息。
MQTT遗嘱操作
假设我们现在有一台MQTT客户端A。在使用MQTT遗嘱时,它的client id是test-1它的遗嘱主题是“test-1-will”。
1. 当test-1连接服务端时,CONNECT报文中的遗嘱消息的内容是“offline”。并且它的遗嘱保留设置为 false。
2. 当test-1成功连接服务端后,立即向遗嘱主题“test-1-will”发布一条消息“online”。同时在发布此消息时,如果保留标志设置为true。此时,只要test-1在线,那么任何设备一订阅“test-1-will”都能收到设备在线的消息“online”。
3. 如果test-1发生意外离线,那么任何设备一订阅“test-1-will”就会收到设备离线的消息“offline”。
