Größe und Typ der RabbitMQ-Nachrichten

97
  1. Welche Nachrichten könnten in RabbitMQ-Warteschlangen gespeichert werden? Nur Saiten? Oder kann ich auswählen, welchen Typ ich speichern möchte: int, binär, string usw.?
  2. Was ist die maximale Größe einer Nachricht?
  3. Wie viele Warteschlangen oder Börsen könnten erstellt werden? Oder hängt es von der Leistung des Servers ab?
tuchk4
quelle

Antworten:

117
  1. Theoretisch kann alles als Nachricht gespeichert / gesendet werden. Sie möchten eigentlich nichts in den Warteschlangen speichern. Das System arbeitet am effizientesten, wenn die Warteschlangen die meiste Zeit leer sind. Sie können alles, was Sie wollen, unter zwei Voraussetzungen an die Warteschlange senden:

    • Das, was Sie senden, kann in und aus einem Bytestring konvertiert werden
    • Der Verbraucher weiß genau, was er erhält und wie er es in das ursprüngliche Objekt konvertieren kann

    Strings sind ziemlich einfach, sie haben eine eingebaute Methode zum Konvertieren in und von Bytes. Wenn Sie wissen, dass es sich um eine Zeichenfolge handelt, können Sie sie zurückkonvertieren. Die beste Option ist die Verwendung einer Markup-Zeichenfolge wie XML, JSON oder YML. Auf diese Weise können Sie Objekte in Strings und wieder zurück in die Originalobjekte konvertieren. Sie arbeiten programmierübergreifend, sodass Ihr Verbraucher in einer anderen Sprache als Ihr Produzent geschrieben werden kann, solange er weiß, wie er das Objekt versteht. Ich arbeite in Java. Ich möchte komplexe Nachrichten mit Unterobjekten in den Feldern senden. Ich benutze mein eigenes Nachrichtenobjekt. Das Nachrichtenobjekt verfügt über zwei zusätzliche Methoden toBytesundfromBytesdie zum und vom bytestream konvertieren. Ich verwende Routing-Schlüssel, die keinen Zweifel daran lassen, welche Art von Nachricht der Verbraucher empfängt. Die Nachricht ist serialisierbar. Dies funktioniert gut, ist aber einschränkend, da ich es nur mit anderen Java-Programmen verwenden kann.

  2. Die Größe der Nachricht wird durch den Speicher auf dem Server begrenzt, und wenn sie dauerhaft ist, auch durch den freien Festplattenspeicher. Sie möchten wahrscheinlich keine zu großen Nachrichten senden. Es ist möglicherweise besser, einen Verweis auf eine Datei oder eine Datenbank zu senden.

    Vielleicht möchten Sie auch die Leistungskennzahlen nachlesen: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / rabbitmq-leistungsmessungen-teil-2 /

  3. Warteschlangen sind ziemlich leicht, Sie werden höchstwahrscheinlich durch die Anzahl Ihrer Verbindungen begrenzt sein. Dies hängt höchstwahrscheinlich vom Server ab. Hier einige Informationen zu einer ähnlichen Frage: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

Robthewolf
quelle
9

Die maximale Nachrichtengröße in RabbitMQ betrug 2 GiB vor Version 3.8.0:

%% Trying to send a term across a cluster larger than 2^31 bytes will
%% cause the VM to exit with "Absurdly large distribution output data
%% buffer". So we limit the max message size to 2^31 - 10^6 bytes (1MB
%% to allow plenty of leeway for the #basic_message{} and #content{}
%% wrapping the message body).
-define(MAX_MSG_SIZE, 2147383648).

Referenz: https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

Es ist 512 MiB seit Version 3.8.0:

%% Max message size is hard limited to 512 MiB.
%% If user configures a greater rabbit.max_message_size,
%% this value is used instead.
-define(MAX_MSG_SIZE, 536870912).

Referenz: https://github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238

Maggyero
quelle
4
  1. Siehe Robthewolfs Antwort .

  2. Die maximale Nachrichtengröße beträgt 2 GB. Die Leistungsoptimierung für Nachrichten dieser Größe ist jedoch nicht effektiv. Maximale Nachrichtengröße

  3. Die Anzahl der Warteschlangen wird von der RabbitMQ Server-Software nicht streng begrenzt. Die Hardware, auf der der Server ausgeführt wird, kann sich jedoch sehr wohl auf dieses Limit auswirken.

3a. Standardmäßig gibt es keine vom Server festgelegte Warteschlangenlängenbeschränkung. Sie können dies jedoch durch serverseitige Richtlinien (Konfiguration) oder clientseitige Richtlinien einschränken. Maximale Warteschlangenlänge

Es gibt weitere Informationen und Links zu einem verwandten Beitrag .

JerodG
quelle