简介
当客户端断开连接时,发送给相关的订阅者的遗嘱消息。以下情况下会发送 Will Message:
服务端发生了I/O 错误或者网络失败;
客户端在定义的心跳时期失联;
客户端在发送下线包之前关闭网络连接;
服务端在收到下线包之前关闭网络连接。
遗嘱消息一般通过在客户端 CONNECT 的时候指定。如下所示,在连接的时候通过调用 MqttConnectOptions 实例的 setWill 方法来设定。任何订阅了下面的主题的客户端都可以收到该遗嘱消息。
//方法1 MqttConnectOptions.setWill(MqttTopic topic, byte[] payload, int qos, boolean retained)
//方法2 MqttConnectOptions.setWill(java.lang.String topic, byte[] payload, int qos, boolean retained)
使用场景
在客户端 A 进行连接时候,遗嘱消息设定为”offline“,客户端 B 订阅这个遗嘱主题。 当 A 异常断开时,客户端 B 会收到这个”offline“的遗嘱消息,从而知道客户端 A 离线了。
Connect Flag 报文字段
遗嘱消息在客户端正常调用 disconnect 方法之后并不会被发送。
Will Flag 作用 简而言之,就是客户端预先定义好,在自己异常断开的情况下,所留下的最后遗愿(Last Will),也称之为遗嘱(Testament)。这个遗嘱就是一个由客户端预先定义好的主题和对应消息,附加在CONNECT的可变报文头部中,在客户端连接出现异常的情况下,由服务器主动发布此消息。
当Will Flag位为1时,Will QoS和Will Retain才会被读取