2015-05-23 16 views
5

Mam pomyślnie skonfigurowany klaster RabbitMQ, który obsługuje MQTT za pośrednictwem wtyczki MQTT. W tej chwili komunikaty MQTT przekazują wymianę tematów, która jest powiązana z kolejką roboczą. Tak więc wszystkie wiadomości MQTT są przechowywane w tej kolejce roboczej.Testowanie wydajności RabbitMQ/MQTT

Teraz chciałbym przetestować wydajność wejścia tego klastra, analizując wykresy wtyczki zarządzania RabbitMQ. Mój plan polegał na założeniu 2 wydawców NodeJS MQTT wystrzeliwujących wiele komunikatów MQTT w pętli for, ale to się nie powiedzie.

Gdy do pętli działa ponad 3000 razy, nie wszystkie komunikaty przeżyć ... (Znajdź mój kod testowy poniżej) Chciałbym mieć swoje zdanie na ten temat:

  1. Co może być powodem wiadomości nie przeżyjesz?
  2. Jaki jest najlepszy sposób oceny wydajności RabbitMQ/MQTT?
  3. Czy powinienem używać wielu wydawców? Gniazdo [kod] => [bufor pamięci klienta] => [send-System:

Kod:

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

można spróbować użyć QoS 1 lub 2? –

+0

Aby załadować test brokera MQTT, możesz użyć jakiegoś narzędzia takiego jak https://github.com/emqtt/emqtt_benchmark/ (mimo to trzeba zainstalować Erlang). Lub możesz zrobić to samo, na przykład https://github.com/mqttjs/mqtt-stack/blob/master/benchmark/send.js –

+0

Twoje pytania nie są jasne. Co oznacza "nie przetrwać"? Twój subskrybent nie widzi wszystkich? Google "MQTT QOS". Testowanie wydajności jest skomplikowane. To wszystko nasza firma robi od 20 lat. Na początek musisz zadać sobie DOKŁADNIE to, co testujesz. Następne pytanie brzmi "gdzie jest wąskie gardło?". Ostatnią rzeczą, jakiej pragniesz, jest twoje urządzenie testowe, które będzie wąskim gardłem. Wskazówki na temat problemów można znaleźć na następujących stronach: http://gambitcomm.blogspot.com/2017/09/how-to-right-size-your-iot-platform.html i http://gambitcomm.blogspot.com/ 2016/10/mqtt-performance-methodology-using.html –

Odpowiedz

0

wiadomości są pakowane do gniazda strumienia i rzeczywiste bajty danych są gdzieś na ścieżce buffer] => [bufor gniazda systemu recv] => [kod serwera].

Jeśli korzystasz z localhost, szansa na bufor gniazda dla wiadomości 3K jest minimalna, ale istnieje.

Nie jestem zaznajomiony z klientem mqqt nodeJS, ale jeśli wykonuje on client.end() z operacją zamykania gniazd, możliwe jest, że niektóre ramki mqtt po prostu nie docierają do serwera.

Masz kilka opcji do testu jak:

  • spać nieco wcześniej client.end(), tylko trochę;
  • używać QoS = 1 wiadomości, wciąż masz szansę na utratę niepotrzebnych bajtów, w zależności od konfiguracji rozmiaru okna mqtt;
  • użycie smth bardziej odpowiednie, można google dla "generator obciążenia mqtt" dla próbek