MQTT параметр qos не имеет никакого эффекта - PullRequest
0 голосов
/ 31 октября 2019

Я установил сервер 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 ...

Спасибо

1 Ответ

1 голос
/ 31 октября 2019

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 
...