2013-08-21 9 views
73
  1. Welche Botschaften in RabbitMQ Warteschlangen gespeichert werden könnten? Nur Zeichenfolgen? Oder kann ich auswählen, welchen Typ ich speichern möchte: int, binary, string usw.?
  2. Was ist die maximale Größe einer Nachricht?
  3. Wie viele Warteschlangen oder Austausche könnten erstellt werden? Oder hängt es von der Leistung des Servers ab?

Antwort

88
  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 mit zwei Voraussetzungen, was Sie wollen an die Warteschlange senden:

    • Das, was Sie senden können umgewandelt werden in und aus einer bytestring
    • Der Verbraucher weiß genau, was es ist immer und wie es zu der konvertieren Original-Objekt

    Strings sind recht einfach, sie haben eine für die Umwandlung in Verfahren gebaut und von Bytes. Wenn Sie wissen, dass es eine Zeichenfolge ist, dann wissen Sie, wie Sie es zurück konvertieren. 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 ursprünglichen Objekte konvertieren. Sie arbeiten über Programmiersprachen hinweg, so dass Ihr Konsument in einer anderen Sprache für Ihren Produzenten 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 toBytes und fromBytes, die in und aus dem Bytestream konvertieren. Ich verwende Routing-Schlüssel, die keinen Zweifel darüber lassen, welche Art von Nachricht der Verbraucher erhält. 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 es persistent ist, dann auch die freie Festplatte Speicherplatz. Wahrscheinlich möchten Sie keine zu großen Nachrichten senden. Es könnte besser sein, einen Verweis auf eine Datei oder DB zu senden.

    Sie könnten auch auf ihre Leistung Maßnahmen lesen wollen: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/blog/2012/04/25/rabbitmq-performance-measurements-part-2/

  3. Queues sind ziemlich leicht, werden Sie höchstwahrscheinlich durch die Anzahl der Verbindungen begrenzt werden Sie haben. Es hängt am wahrscheinlichsten vom Server ab. Hier finden Sie einige Informationen zu einer ähnlichen Frage: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

2
  1. robthewolf's answer See.

  2. Die maximale Nachrichtengröße beträgt 2 GB, die Leistungsoptimierung für Nachrichten dieser Größe ist jedoch nicht effektiv. Max Message Size

  3. Es gibt keine feste Grenze, die von RabbitMQ Server Software für die Anzahl der Warteschlangen auferlegt wird, aber die Hardware, auf der der Server läuft, kann sich sehr gut auf dieses Limit auswirken.

3a.Es gibt keine Beschränkung der Warteschlangenlänge, die vom Server standardmäßig vorgegeben wird. Sie können dies jedoch durch serverseitige Richtlinien (Konfiguration) oder clientseitige Richtlinien einschränken. Max Queue Length

Es gibt weitere Informationen und Links zu einem related post.