如何在Moquette MQTT Broker中配置QoS 可通过moquette.conf设置吗
Moquette QoS相关配置方法
首先明确结论:Moquette 原生完整支持MQTT标准定义的QoS 0、QoS 1、QoS 2三个等级,不需要通过配置项单独开启QoS基础能力,你只需要调整几个关联QoS行为的参数,即可正常开展不同QoS等级的运行行为观测。
现有配置的QoS相关影响
你当前使用的配置文件中,persistence false参数会直接影响QoS 1、QoS 2的可靠性表现:该配置关闭了Broker的持久化能力,Broker进程重启后,所有未完成投递的QoS1/QoS2消息、客户端会话状态都会被直接清空。如果仅测试QoS的报文交互流程可以保留该配置,如果要验证QoS1/QoS2的离线投递、断线重传等可靠性语义,需要将该参数修改为persistence true。
可追加到moquette.conf的QoS相关配置项
你可以在现有配置文件末尾追加以下参数,自定义QoS运行规则:
# Broker允许的最大QoS等级,默认值为2,设置为2即支持客户端使用QoS0/1/2所有等级 max_qos 2 # QoS1/QoS2消息的未确认重传间隔,单位为毫秒,默认值30000(30秒),测试时可调小为5000方便快速观测重传行为 retry_interval 5000 # QoS2流程的飞行窗口大小,控制同时处于QoS2交互流程中的最大消息数,默认值为10 inflight_window_size 10 # 持久会话下是否为离线客户端缓存待投递的QoS1/QoS2消息,默认值为true,测试离线投递场景必须开启 allow_queued_messages true
测试注意事项
- QoS等级是客户端与Broker协商确定的,并非Broker全局强制指定:当
max_qos设为2时,客户端在连接、发布消息、订阅主题时可以自行指定使用的QoS等级,Broker会按照MQTT标准规则做协商降级,最终投递的QoS等级取发布QoS和订阅QoS的最小值。 - 观测不同QoS的运行行为不需要反复修改Broker配置,只需要调整测试客户端的参数即可:
- 观测QoS0:发布、订阅均指定QoS0,可看到消息投递无确认流程,Broker不缓存、不重传消息
- 观测QoS1:发布、订阅均指定QoS1,可看到PUBACK确认报文交互,客户端未返回ACK时Broker会按照配置的
retry_interval重传消息 - 观测QoS2:发布、订阅均指定QoS2,可看到PUBREC/PUBREL/PUBCOMP的四次握手流程,保证消息恰好投递一次
- 当
persistence设为false时,QoS1/QoS2的重传、队列缓存逻辑仅在Broker运行期间生效,重启后所有状态丢失,不符合MQTT标准定义的QoS可靠性语义,仅适合临时测试报文交互流程。
内容的提问来源于stack exchange,提问作者mdanish98
相关产品推荐
相关产品推荐

