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

MQTT客户端断开重连后无法接收特定客户端消息问题排查

MQTT重连后无法接收QoS≥1消息问题排查与解决

问题现象

client A经过几次断开重连操作后,无法接收client B发送的消息,但存在以下例外情况:

  • 使用mosquitto_sub手动订阅client B的发布主题,可正常接收消息
  • 使用mosquitto_pub向client A订阅的主题发送消息,client A能正常接收

环境信息

  • Broker:Mosquitto 1.6.12(运行在RaspberryPi CM3,曾从1.6.10升级至此)
  • 客户端:Go语言编写,基于paho mqtt v1.4.2,以systemd服务启动
  • 客户端配置:SetCleanSession(false)、SetKeepAlive(10*time.Second),客户端ID唯一

排查过程

  1. 查看Mosquitto日志发现:client A重连后完成订阅操作前,broker已向其发送消息
  2. 定位到QoS等级关联问题:client A仅能接收QoS 0的消息,无法接收QoS≥1的消息,而client B所有消息均以QoS 1发送
  3. 尝试升级Mosquitto版本、重启broker,仅重启能临时恢复,但无法彻底解决问题

解决方案

编写可复现问题的Go代码示例验证后,确认通过添加DefaultPublishHandler处理broker提前发送的消息,问题得到彻底解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:33:21