You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让MQTT客户端优雅退出时触发Last Will消息?

MQTT客户端优雅退出时触发Last Will消息的解决方案

问题场景

使用paho-mqtt 1.6.1(支持MQTT 5.0)时,配置了Last Will遗嘱消息,但调用client.disconnect()优雅退出客户端时,遗嘱消息并未发布。尝试过client.disconnect("disconnect-with-will-message")、client.disconnect(0)、client.disconnect(1)等方式均无效,需要实现无论客户端是否优雅退出,离线时都能触发遗嘱通知的效果,且不想通过手动发布消息的方式实现。

解决方案

核心是初始化客户端时明确指定使用MQTT 5协议,并在调用disconnect()时传入MQTT 5规范中支持触发遗嘱消息的断开原因码。

示例代码如下:

import paho.mqtt.client as mqtt
import paho.mqtt.reasoncodes as reasoncodes
import paho.mqtt.packettypes as packettypes

# 初始化客户端时指定MQTT 5协议
client = mqtt.Client(protocol=mqtt.MQTTv5)

# 设置遗嘱消息主题(可按需自定义消息内容)
client.will_set('last/willi')

# 连接MQTT Broker
client.connect('localhost')

# 示例:发布测试消息
client.publish('hello/world')
client.loop()

# 用原因码4触发遗嘱消息后断开连接(原因码4对应"Disconnect with Will Message"场景)
client.disconnect(reasoncodes.ReasonCodes(packettypes.PacketTypes.DISCONNECT, "Disconnect", 4))

关键说明

  • MQTT 5.0协议新增了通过断开原因码控制遗嘱消息发布的特性,原因码4专门用于触发"优雅断开时仍发布遗嘱"的场景。
  • 必须确保客户端初始化时指定protocol=mqtt.MQTTv5,MQTT 3.x协议不支持该特性。

内容的提问来源于stack exchange,提问作者ningelsohn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:08:16