Потеря сообщений MQTT при использовании MQTT.js и Mosquitto - PullRequest
0 голосов
/ 29 октября 2019

Мой клиент MQTT.js не может получить все сообщения от брокера Mosquitto из-за постоянного отключения / повторного подключения. При добавлении опции clean: false для публикации и подписки клиент вообще прекращает получать сообщения. Я пробовал все настройки qos, но безуспешно. Я думаю, что я использую cleanSession неправильно, кто-нибудь знает?

Моя конфигурация следующая:

var options = {
    clientId: "python_pub",
    clean: false,
    qos: 2  
};

// connect to the message server
var client = mqtt.connect('mqtt://PATH_TO_BROKER', options);

client.on('connect', function() {   
  client.subscribe('topic_name');
})

client.on('message', function(topic, message) {
  console.log("received: %s", message);
}

var count = 0;
while (count < 100) {
  client.publish('test_topic', count.toString(), {qos: 2});
  count++;
}

1 Ответ

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

QOS - это не просто параметр в опубликованном сообщении, он также является частью подписки.

QOS одновременно охватывает только одну часть передачи сообщения. например, только между издателем и брокером, а не полностью до клиента. Если вы хотите обеспечить гарантированную доставку клиенту, вам также необходимо подписаться на QOS, значение которого больше 0.

Опция qos в вашем options объекте будет игнорироваться.

Также выследует посмотреть, почему ваш клиент продолжает отключаться первым. Я вижу, что у вас жестко закодированный клиент, как правило, это не очень хорошая идея, поскольку клиенты должны быть глобально уникальными для всех клиентов, подключенных к брокеру. Если второй клиент пытается подключиться к брокеру с клиентом уже подключенного клиента, он отключит первый клиент. Если у вас включено автоматическое переподключение, то это приведет к тому, что оба клиента будут сражаться и отталкивать друг друга от брокера, что похоже на проблему, которую вы описали.

...