2015-05-23 10 views
5

Ich habe erfolgreich einen RabbitMQ-Cluster konfiguriert, der MQTT über das MQTT-Plugin unterstützt. Im Moment übergeben die MQTT-Nachrichten einen Themenaustausch, der mit einer Arbeitswarteschlange verknüpft ist. Daher werden alle MQTT-Nachrichten in dieser Arbeitswarteschlange gespeichert.Testen der RabbitMQ/MQTT-Leistung

Jetzt möchte ich die Eingangsleistung dieses Clusters testen, indem ich die Graphen im RabbitMQ-Management-Plugin untersuche. Mein Plan war, 2 NodeJS MQTT-Publisher einzurichten, die viele MQTT-Nachrichten innerhalb einer for-Schleife abfeuern, aber dies schlägt fehl.

Wenn die for-Schleife über 3000 mal läuft, nicht alle Nachrichten überleben ... (Finden mein Testcode unten) Ich möchte Ihre Meinung dazu haben:

  1. Was ist der Grund Nachrichten sein könnte überlebst du nicht?
  2. Was ist der beste Weg, die Leistung von RabbitMQ/MQTT zu bewerten?
  3. Sollte ich mehrere Publisher verwenden?

Code:

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

Können Sie eine QoS von 1 oder 2 versuchen Sie es mit? –

+0

Zum Testen Ihres MQTT-Brokers können Sie einige Tool-Likes verwenden https://github.com/emqtt/emqtt_benchmark/ (Erlang muss installiert sein). Oder Sie können das gleiche tun, wie dieses https://github.com/mqttjs/mqtt-stack/blob/master/benchmark/send.js –

+0

Ihre Fragen sind nicht klar. Was genau bedeutet "nicht überleben"? Ihr Abonnent sieht nicht alle von ihnen? Google "MQTT QOS". Leistungstests sind kompliziert. Das ist alles, was unser Unternehmen seit 20 Jahren macht. Für den Anfang müssen Sie sich GENAU fragen, was Sie testen. Die nächste Frage ist "Wo ist der Engpass?". Das letzte, was Sie wollen, ist, dass Ihr Prüfstand der Flaschenhals ist. Für einen Hinweis auf die Probleme finden Sie auf diesen Seiten: http://gambitcomm.blogspot.com/2017/09/how-to-right-size-your-iot-platform.html und http://gamilitcomm.blogspot.com/ 2016/10/mqtt-performance-methodology-using.html –

Antwort

0

Nachricht in Stream-Socket und Bytes sind auf dem Weg irgendwo eigentlichen Daten verpackt wird: [Code] => [Speicherpuffer des Clients] => [send-Systemsockel buffer] => [recv-system socket buffer] => [Servercode].

Wenn Sie localhost verwenden, ist die Chance für Socket-Puffer für 3K-Nachrichten minimal, aber vorhanden.

Ich bin nicht sehr vertraut mit mqqt nodeJS Client, aber wenn es client.end() mit Socket-Shutdown-Vorgang ist es möglich, dass einige mqtt Frames einfach nicht Ihren Server erreichen.

Sie haben einige Optionen für Ihren Test wie:

  • Schlaf ein bisschen vor client.end(), nur ein wenig;
  • Verwenden Sie QoS = 1 Nachrichten, noch haben Sie eine Chance, einige nicht gepackte Bytes zu verlieren, abhängig von der Konfiguration der Größe des mqtt-Fensters;
  • Verwendung smth geeignetere, können Sie Google für „MQTT Lastgenerator“ für Proben