遗嘱消息是 MQTT 为那些可能出现 意外断线 的设备提供的将 遗嘱 优雅地发送给第三方的能力。意外断线包括但不限于:
- 因网络故障或网络波动,设备在保持连接周期内未能通讯,连接被服务端关闭
- 设备意外掉电
- 设备尝试进行不被允许的操作而被服务端关闭连接,例如订阅自身权限以外的主题等
当应用需要即时的感知设备下线状态时,可以使用 MQTT 遗嘱消息实现。
- 设备连接时,指定 遗嘱主题和遗嘱内容(可以将client id写到内容中,用于服务器判断接收的遗嘱消息来自哪个客户端)
- 服务端监听遗嘱主题,当设备意外断线时,服务端能立即收到遗嘱内容
- 设备端连接成功时,可以主动往遗嘱主题发布一条消息,标志设备上线
安装 EMQX
docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.0
在客户端连接属性上设置遗嘱主题和内容

使用 MQTTX 软件模拟客户端,在连接属性上设定好遗嘱主题和内容。
本例中设定:
Last-Will Topic:online-status-change
Last-Will Payload:
{
"clientId":"mqttx_3e826f48",
"message":"I have lost",
"status":"offline"
}
点击 Connect 按钮,发起正常连接。
服务器监听遗嘱主题

使用 MQTT.fx 模拟服务器端,监听遗嘱主题 online-status-change。
点击 MQTTX 软件右侧顶部的关闭按钮,模拟客户端掉电异常断线。
观察 MQTT.fx 监听的 online-status-change 的主题,可以看到立即收到了设备的遗嘱内容(由Broker发出)。
服务器收到遗嘱内容,根据内容马上可以判断出设备掉线了。
资料:
https://www.emqx.io/docs/zh/v4.4/getting-started/install.html

MQTT遗嘱消息是确保设备意外断线时,能够向服务器发送最后状态的一种机制。通过预设遗嘱主题和内容,当设备因网络故障、设备掉电或权限问题断开连接时,服务器会接收到遗嘱内容,从而实时感知设备的离线状态。在本例中,使用MQTTX模拟客户端设置了遗嘱消息,并通过MQTT.fx作为服务器监听遗嘱主题,展示了遗嘱消息在设备异常断线时的即时传递效果。
1214

被折叠的 条评论
为什么被折叠?



