web-dev-qa-db-fra.com

Taille et types de message RabbitMQ

  1. Quels messages pourraient ê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?
92
tuchk4
  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:

    • La chose que vous envoyez peut être convertie en une chaîne d'octets.
    • Le consommateur sait exactement ce qu'il reçoit et comment le convertir en objet d'origine

    Les chaînes sont assez faciles, elles ont une méthode intégrée pour convertir en octets. Si vous savez que c'est 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 inversement en objets d'origine. ils fonctionnent dans plusieurs langages de programmation afin que votre consommateur puisse être écrit dans un langage différent de celui de son producteur, à condition qu'il sache 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 de message a deux méthodes supplémentaires toBytes et fromBytes qui convertissent en bytestream. 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 limité car je ne peux l’utiliser qu’avec d’autres Java.

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

    Vous pouvez également vouloir lire 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-measurements-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 du serveur le plus probable. Voici quelques informations sur une question similaire: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

108
robthewolf

La taille de message maximale du message dans RabbitMQ était égale à 2 Go jusqu'à la version 3.7:

%% 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.13/include/rabbit.hrl#L279

C'est maintenant 512 MiB à partir de la version 3.8:

%% 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/master/include/rabbit.hrl#L238

6
Maggyero
  1. Voir réponse de robthewolf .

  2. La taille maximale des messages est de 2 Go. Toutefois, le réglage des performances pour les messages de cette taille n’est pas efficace. Taille maximale du message

  3. Le logiciel serveur RabbitMQ n'impose aucune limite stricte au nombre de files d'attente. Toutefois, le matériel sur lequel le serveur s'exécute peut très bien avoir une incidence sur cette limite.

3a. Aucune limite de longueur de file d'attente imposée par le serveur par défaut. 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 post connexe .

4
JerodG