Tamaño y tipos de mensajes de RabbitMQ

97
  1. ¿Qué mensajes se pueden almacenar en las colas de RabbitMQ? ¿Solo cuerdas? ¿O puedo seleccionar qué tipo quiero almacenar: int, binary, string, etc.?
  2. ¿Cuál es el tamaño máximo de un mensaje?
  3. ¿Cuántas colas o intercambios se pueden crear? ¿O depende de la potencia del servidor?
tuchk4
fuente

Respuestas:

117
  1. Teóricamente, cualquier cosa puede almacenarse / enviarse como mensaje. En realidad, no desea almacenar nada en las colas. El sistema funciona de manera más eficiente si las colas están vacías la mayor parte del tiempo. Puede enviar todo lo que desee a la cola con dos condiciones previas:

    • Lo que está enviando se puede convertir hacia y desde una cadena de bytes
    • El consumidor sabe exactamente lo que obtiene y cómo convertirlo en el objeto original.

    Las cadenas son bastante fáciles, tienen un método incorporado para convertir hacia y desde bytes. Si sabe que es una cadena, entonces sabe cómo volver a convertirla. La mejor opción es utilizar una cadena de marcado como XML, JSON o YML. De esta forma, puede convertir objetos en cadenas y volver a los objetos originales; funcionan en todos los lenguajes de programación para que su consumidor pueda escribir en un lenguaje diferente al de su productor, siempre que sepa cómo entender el objeto. Trabajo en Java. Quiero enviar mensajes complejos con subobjetos en los campos. Utilizo mi propio objeto de mensaje. El objeto de mensaje tiene dos métodos adicionales toBytesyfromBytesque se convierten desde y hacia el bytestream. Utilizo claves de enrutamiento que no dejan ninguna duda sobre el tipo de mensaje que recibe el consumidor. El mensaje es serializable. Esto funciona bien, pero es limitante ya que solo puedo usarlo con otros programas Java.

  2. El tamaño del mensaje está limitado por la memoria en el servidor, y si es persistente, también el espacio libre en el disco duro. Probablemente no desee enviar mensajes demasiado grandes; sería mejor enviar una referencia a un archivo o base de datos.

    También es posible que desee leer sobre sus medidas de rendimiento: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / rabbitmq-mediciones-de-rendimiento-parte-2 /

  3. Las colas son bastante livianas, lo más probable es que esté limitado por la cantidad de conexiones que tiene. Dependerá del servidor más probable. Aquí hay información sobre una pregunta similar: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

robthewolf
fuente
9

El tamaño máximo de mensaje en RabbitMQ era de 2 GiB antes de la versión 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).

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

Han sido 512 MiB desde la versión 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).

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

Maggyero
fuente
4
  1. Vea la respuesta de robthewolf .

  2. El tamaño máximo del mensaje es de 2 GB; sin embargo, el ajuste del rendimiento para mensajes de este tamaño no es efectivo. Tamaño máximo de mensaje

  3. No hay un límite estricto impuesto por RabbitMQ Server Software en el número de colas, sin embargo, el hardware en el que se ejecuta el servidor puede afectar este límite.

3a. El servidor no impone ningún límite de longitud de cola de forma predeterminada. Sin embargo, puede limitar esto mediante la política del lado del servidor (configuración) o la política del lado del cliente. Longitud máxima de la cola

Hay más información y enlaces en una publicación relacionada .

JerodG
fuente