MQTT qos参数没有作用

MQTT qos parameter has no effect

我在树莓派服务器上安装了 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 一次仅适用于连接的一个分支。

这意味着 publisher/broker 和 broker/subscriber 之间的 QOS 可能不同。

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

如果您想使用 mosquitto_sub 进行测试,您还需要在命令行中包含更高的 QOS。在断开连接之前,您需要在 QOS 2 上建立订阅:

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

您还需要告诉 mosquitto_sub 在重新连接时不要请求干净的会话:

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