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

MQTT(Mosquitto)QoS 2:未收到PUBREL时如何清理滞留消息?

Mosquitto处理未完成QoS 2消息的行为分析

核心结论

默认情况下,Mosquitto会永久保留这类未完成的QoS 2消息状态,直到客户端重新连接并完成QoS 2的完整流程,或者该客户端的会话被主动清理。

原因说明

MQTT QoS 2的规范要求服务器必须维护消息的投递状态,确保消息仅被精确投递一次。当客户端发送PUBLISH(QoS 2)并收到服务器的PUBREC后,若始终不回复PUBREL,服务器会持续保存该消息的相关状态(包括消息内容、会话关联信息等),等待客户端后续完成流程。

目前Mosquitto确实没有提供专门的配置参数,用于自动超时清理这类未完成的QoS 2消息。

可行的处理方案

  • 利用max_keepalive配置:如果客户端设置了keepalive参数,当客户端超过max_keepalive配置的时间未与服务器通信,服务器会判定客户端离线,自动清理其会话,连带清除该会话下未完成的QoS 2消息状态。但如果客户端未设置keepalive,该机制无法生效。
  • 手动清理僵尸会话:通过脚本或第三方工具监控服务器上的客户端会话,定期清理长时间无活动的僵尸会话,释放被占用的资源。
  • 关注版本更新:可以留意Mosquitto的官方更新日志,后续版本可能会新增针对这类未完成消息的超时清理功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:21:06