109 votes

Quelles sont les limites des messages, des files d'attente et des échanges ?

  1. Quels sont les types de messages autorisés (chaînes de caractères, octets, entiers, etc.) ?
  2. Quelle est la taille maximale d'un message ?
  3. Quel est le nombre maximum de files d'attente et d'échanges ?

122voto

robthewolf Points 2793
  1. Théoriquement, tout peut être stocké/envoyé sous forme de message. En fait, vous ne voulez pas stocker quoi que ce soit 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 à la file d'attente avec deux conditions préalables :

    • La chose que vous envoyez peut être convertie en et depuis un bytestring.
    • Le consommateur sait exactement ce qu'il reçoit et comment le convertir en objet original.

    Les chaînes de caractères sont assez faciles, elles ont une méthode intégrée pour convertir les octets. Si vous savez qu'il s'agit d'une chaîne, vous savez comment la reconvertir. La meilleure option est d'utiliser une chaîne de balisage comme XML, JSON ou YML. De cette façon, vous pouvez convertir des objets en chaînes de caractères et revenir aux objets d'origine. Ils fonctionnent dans plusieurs langages de programmation, de sorte que votre consommateur peut être écrit dans un langage différent de celui de votre producteur, à condition qu'il sache comment comprendre l'objet. Je travaille en Java. Je veux envoyer des messages complexes avec des sous-objets dans les champs. J'utilise mon propre objet message. L'objet message possède deux méthodes supplémentaires toBytes y fromBytes qui convertissent vers et depuis le 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 Serializable. Cela fonctionne bien, mais c'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 du serveur et, s'il est persistant, par l'espace libre sur le disque dur. Vous ne souhaitez probablement pas envoyer de messages trop volumineux ; il est préférable d'envoyer une référence à un fichier ou à une base de données.

    Vous pouvez également vous renseigner sur 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 très probablement limité par le nombre de connexions dont vous disposez. Cela dépendra probablement du serveur. Voici quelques informations sur une question similaire : http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

19voto

Maggyero Points 292

Quelle est la taille maximale d'un message ?

Avant, c'était 2 GiB 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

Il a été 512 MiB 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

5voto

Jerod Points 192
  1. Voir Réponse de robthewolf .

  2. La taille maximale des messages est de 2 Go, mais l'optimisation des performances pour les messages de cette taille n'est pas efficace. Taille maximale du message

  3. Il n'y a pas de limite stricte imposée par le logiciel du 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. Il n'y a pas de limite de longueur de file d'attente imposée par le serveur par défaut. Vous pouvez toutefois la limiter par le biais d'une politique côté serveur (configuration) ou côté client. Longueur maximale de la file d'attente

Vous trouverez de plus amples informations et des liens sur le site poste connexe .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X