Taille et types de message RabbitMQ

97
  1. Quels messages peuvent être stockés dans les files d'attente RabbitMQ? Seulement des cordes? Ou puis-je sélectionner le type que je souhaite stocker: int, binaire, chaîne, etc.?
  2. Quelle est la taille maximale d'un message?
  3. Combien de files d'attente ou d'échanges pourraient être créés? Ou cela dépend-il de la puissance du serveur?
tuchk4
la source

Réponses:

117
  1. Théoriquement, tout peut être stocké / envoyé sous forme de message. En fait, vous ne voulez rien stocker dans les files d'attente. Le système fonctionne plus efficacement si les files d'attente sont vides la plupart du temps. Vous pouvez envoyer tout ce que vous voulez dans la file d'attente avec deux conditions préalables:

    • L'objet que vous envoyez peut être converti vers et depuis une chaîne d'octets
    • Le consommateur sait exactement ce qu'il obtient et comment le convertir en objet d'origine

    Les chaînes sont assez faciles, elles ont une méthode intégrée pour convertir vers et depuis des octets. Si vous savez qu'il s'agit d'une chaîne, vous savez comment la reconvertir. La meilleure option consiste à utiliser une chaîne de balisage telle que XML, JSON ou YML. De cette façon, vous pouvez convertir des objets en chaînes et revenir aux objets d'origine; ils fonctionnent sur plusieurs langages de programmation afin que votre consommateur puisse être écrit dans un langage différent de celui de votre producteur tant qu'il sait comment comprendre l'objet. Je travaille en Java. Je souhaite envoyer des messages complexes avec des sous-objets dans les champs. J'utilise mon propre objet de message. L'objet message a deux méthodes supplémentaires toBytesetfromBytesqui convertissent vers et depuis le flux d'octets. J'utilise des clés de routage qui ne laissent aucun doute sur le type de message que le consommateur reçoit. Le message est sérialisable. Cela fonctionne bien, mais est limitatif car je ne peux l'utiliser qu'avec d'autres programmes Java.

  2. La taille du message est limitée par la mémoire sur le serveur, et s'il est persistant, l'espace libre sur le disque dur également. Vous ne souhaitez probablement pas envoyer de messages trop volumineux; il peut être préférable d'envoyer une référence à un fichier ou à une base de données.

    Vous pouvez également consulter leurs mesures de performance: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / rabbitmq-performance-mesures-part-2 /

  3. Les files d'attente sont assez légères, vous serez probablement limité par le nombre de connexions que vous avez. Cela dépendra probablement du serveur. Voici quelques informations sur une question similaire: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

Robthewolf
la source
9

La taille maximale des messages dans RabbitMQ était de 2 Gio avant la 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).

Référence: https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

Cela fait 512 Mio depuis la 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).

Référence: https://github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238

Maggyero
la source
4
  1. Voir la réponse de robthewolf .

  2. La taille maximale des messages est de 2 Go, cependant, le réglage des performances pour les messages de cette taille n'est pas efficace. Taille maximale des messages

  3. Il n'y a pas de limite stricte imposée par le logiciel serveur RabbitMQ sur le nombre de files d'attente, cependant, le matériel sur lequel le serveur fonctionne peut très bien avoir un impact sur cette limite.

3a. Aucune limite de longueur de file d'attente n'est imposée par défaut par le serveur. Vous pouvez toutefois limiter cela via une stratégie côté serveur (configuration) ou une stratégie côté client. Longueur maximale de la file d'attente

Il y a plus d'informations et de liens sur un article connexe .

JerodG
la source