Dimensioni e tipi di messaggi RabbitMQ


97
  1. Quali messaggi potrebbero essere archiviati nelle code RabbitMQ? Solo stringhe? Oppure posso selezionare il tipo che voglio memorizzare: int, binary, string ecc.?
  2. Qual è la dimensione massima di un messaggio?
  3. Quante code o scambi si potrebbero creare? O dipende dalla potenza del server?

Risposte:


117
  1. Teoricamente qualsiasi cosa può essere archiviata / inviata come messaggio. In realtà non vuoi memorizzare nulla nelle code. Il sistema funziona in modo più efficiente se le code sono vuote per la maggior parte del tempo. Puoi inviare tutto ciò che desideri alla coda con due condizioni preliminari:

    • La cosa che stai inviando può essere convertita in e da una stringa
    • Il consumatore sa esattamente cosa sta ricevendo e come convertirlo nell'oggetto originale

    Le stringhe sono piuttosto semplici, hanno un metodo integrato per la conversione da e verso i byte. Se sai che è una stringa, allora sai come riconvertirla. L'opzione migliore è utilizzare una stringa di markup come XML, JSON o YML. In questo modo puoi convertire gli oggetti in Stringhe e di nuovo negli oggetti originali; funzionano attraverso linguaggi di programmazione in modo che il tuo consumatore possa essere scritto in una lingua diversa dal tuo produttore purché sappia come capire l'oggetto. Lavoro in Java. Voglio inviare messaggi complessi con oggetti secondari nei campi. Uso il mio oggetto messaggio. L'oggetto messaggio dispone di due metodi aggiuntivi toBytesefromBytesche si convertono da e verso il bytestream. Utilizzo chiavi di routing che non lasciano dubbi sul tipo di messaggio che il consumatore sta ricevendo. Il messaggio è serializzabile. Funziona bene, ma è limitante in quanto posso usarlo solo con altri programmi Java.

  2. La dimensione del messaggio è limitata dalla memoria sul server e, se è persistente, anche lo spazio libero sull'HDD. Probabilmente non vuoi inviare messaggi troppo grandi; potrebbe essere meglio inviare un riferimento a un file o DB.

    Potresti anche leggere le loro misurazioni delle prestazioni: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / rabbitmq-misurazioni-prestazioni-parte-2 /

  3. Le code sono piuttosto leggere, molto probabilmente sarai limitato dal numero di connessioni che hai. Molto probabilmente dipenderà dal server. Ecco alcune informazioni su una domanda simile: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html


9

La dimensione massima del messaggio in RabbitMQ era di 2 GiB prima della versione 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).

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

Sono stati 512 MiB dalla versione 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).

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


4
  1. Vedi la risposta di robthewolf .

  2. La dimensione massima del messaggio è 2 GB, tuttavia, l'ottimizzazione delle prestazioni per i messaggi di queste dimensioni non è efficace. Dimensione massima del messaggio

  3. Non esiste un limite rigido imposto dal software server RabbitMQ al numero di code, tuttavia, l'hardware su cui è in esecuzione il server potrebbe influire molto bene su questo limite.

3a. Non esiste un limite di lunghezza della coda imposto dal server per impostazione predefinita. Tuttavia, è possibile limitarlo tramite criteri lato server (configurazione) o criteri lato client. Lunghezza massima della coda

Ci sono ulteriori informazioni e collegamenti su un post correlato .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.