【问题标题】:MQTT qos parameter has no effectMQTT qos 参数无效
【发布时间】:2019-10-31 17:05:22
【问题描述】:

我在树莓派服务器上安装了 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 是如何工作的......

谢谢

【问题讨论】:

    标签: mqtt mosquitto paho


    【解决方案1】:

    QOS 一次仅适用于一条连接。

    这意味着发布者/代理和代理/订阅者之间的 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 
    

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 2016-02-02
      • 1970-01-01
      • 2017-01-09
      • 2015-01-13
      • 1970-01-01
      • 2019-12-24
      • 2017-07-23
      相关资源
      最近更新 更多