2015-05-23 2 views
5

Я успешно сконфигурировал кластер RabbitMQ, который поддерживает MQTT через плагин MQTT. На данный момент сообщения MQTT проходят обмен темой, привязанный к рабочей очереди. Таким образом, все сообщения MQTT хранятся в этой рабочей очереди.Тестирование производительности RabbitMQ/MQTT

Теперь я хотел бы протестировать производительность ввода этого кластера, изучив графики в плагине управления RabbitMQ. Мой план состоял в том, чтобы создать 2 издателя NodeJS MQTT, отменяющих многие сообщения MQTT в цикле for, но это не удается.

Когда цикл работает более 3000 раз, не все сообщения выживают ... (Найти мой тестовый код ниже), я хотел бы иметь свое мнение по этому вопросу:

  1. Что может быть причиной сообщения не выживают?
  2. Каков наилучший способ оценить производительность RabbitMQ/MQTT?
  3. Должен ли я использовать несколько издателей? Гнездо [код] => [клиент буфер памяти] => [отправить-систему:

Код:

var quantity = 3000; 
var mqtt = require('mqtt'); 
var options = { 
    host: 'localhost', 
    port: 1883, 
    protocolId: 'MQIsdp', 
    rejectUnauthorized: false, 
    protocolId: 'MQIsdp', 
    protocolVersion: 3 
}; 

var client = mqtt.connect(options); 

for(var x=0; x<quantity; x++) 
{ 
    client.publish('/WSN/N536,563E/dynamic',"22"); 
    console.log(x); 
} 

client.end(); 
+0

Вы можете попробовать использовать QoS 1 или 2? –

+0

Чтобы загрузить тест вашего брокера MQTT, вы можете использовать какой-либо инструмент, например https://github.com/emqtt/emqtt_benchmark/ (необходимо, чтобы Erlang был установлен). Или вы можете сделать то же самое, что и https://github.com/mqttjs/mqtt-stack/blob/master/benchmark/send.js –

+0

. Ваши вопросы не ясны. Что означает «не выживать»? Ваш абонент не видит их всех? Google «MQTT QOS». Тестирование производительности сложно. Это наша компания уже 20 лет. Для начала вам нужно спросить себя ТОЧНО, что вы тестируете. Следующий вопрос: «Где узкое место?». Последнее, чего вы хотите, - это тестовая установка, которая станет узким местом. Для ознакомления с проблемами см. Эти страницы: http://gambitcomm.blogspot.com/2017/09/how-to-right-size-your-iot-platform.html и http://gambitcomm.blogspot.com/ 2016/10/MQTT эффективность-методология-using.html –

ответ

0

Сообщения которые упаковывались в потоке сокет и фактические байты данных находятся где-то на пути buffer] => [буфер буфера recv-system] => [код сервера].

Если вы используете localhost, вероятность наличия буфера сокета для сообщений 3K минимальна, но существует.

Я не очень хорошо знаком с mqqt nodeJS-клиентом, но если он делает client.end() с операцией отключения сокета, возможно, некоторые кадры mqtt просто не доходят до вашего сервера.

У вас есть несколько вариантов теста, как:

  • сна немного, прежде чем client.end(), только немного;
  • использовать QoS = 1 сообщение, все же у вас есть шанс потерять некоторые незакрепленные байты, в зависимости от конфигурации размера окна mqtt;
  • использование более целесообразно чем-л, вы можете Google для «генератора нагрузки MQTT» для образцов
Смежные вопросы