MQTT qos参数无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MQTT qos参数无效相关的知识,希望对你有一定的参考价值。

我已经在树莓派服务器上安装了mosquitto服务器。

此服务器工作正常:我已经测试了mosquitto_sub和mosquitto_pub命令。

我已经编写了这个python脚本:

import paho.mqtt.client as mqtt
import time

client = mqtt.Client('module_test_4')
client.connect('127.0.0.1', 1883, 10)

client.loop_start()


for i in range(10):
   client.publish('topic_2', "valeur %d" % i, qos=0)
   time.sleep(1)

client.loop_stop()
client.disconnect()

我已经在2个控制台上两次启动了此脚本:

 mosquitto_sub -h 127.0.0.1 -i module_test_2 -t topic_2

效果很好:我在每个控制台上看到消息。

现在,我尝试将qos参数更改为0,1和2。

我已经尝试运行我的python脚本而不启动mosquitto_sub的任何发生。

我以为mosquitto将缓冲消息并在启动mosquitto_sub时再次发送该消息,但这不起作用。

所以我想知道qos的工作原理...

谢谢

答案

QOS一次仅适用于连接的一个分支。

这意味着发布者/经纪人与经纪人/订户的QOS可能不同。

因此,在您发布的示例中,在发布者和代理之间将QOS设置为2,但在订阅者和代理之间仍将其默认值设置为0。这意味着,就经纪人而言,订阅客户端仅需要QOS 0。

如果要使用mosquitto_sub进行测试,则还需要在命令行上包含更高的QOS。

mosquitto_sub -h 127.0.0.1 -i module_test_2 -t topic_2 -q 2 

以上是关于MQTT qos参数无效的主要内容,如果未能解决你的问题,请参考以下文章

MQTT系列-MQTT的QoS介绍

了解 mqtt 订阅者 qos

ESP32-IDF05-5 WIFI-MQTT高级内容

MQTT协议分析

MQTT-QoS与协议流程

mqtt概念整理