Tamanho e tipos de mensagem RabbitMQ

97
  1. Quais mensagens podem ser armazenadas nas filas do RabbitMQ? Apenas cordas? Ou posso selecionar o tipo que desejo armazenar: int, binário, string etc.?
  2. Qual é o tamanho máximo de uma mensagem?
  3. Quantas filas ou trocas podem ser criadas? Ou depende da energia do servidor?
tuchk4
fonte

Respostas:

117
  1. Teoricamente, qualquer coisa pode ser armazenada / enviada como uma mensagem. Na verdade, você não deseja armazenar nada nas filas. O sistema funciona com mais eficiência se as filas estiverem vazias na maior parte do tempo. Você pode enviar o que quiser para a fila com duas pré-condições:

    • O que você está enviando pode ser convertido de e para um bytestring
    • O consumidor sabe exatamente o que está obtendo e como convertê-lo no objeto original

    Strings são muito fáceis, eles têm um método embutido para converter de e para bytes. Se você sabe que é uma string, você sabe como convertê-la de volta. A melhor opção é usar uma string de marcação como XML, JSON ou YML. Desta forma, você pode converter objetos em Strings e de volta aos objetos originais; eles funcionam em linguagens de programação para que seu consumidor possa ser escrito em uma linguagem diferente para seu produtor, contanto que ele saiba como entender o objeto. Eu trabalho em Java. Quero enviar mensagens complexas com subobjetos nos campos. Eu uso meu próprio objeto de mensagem. O objeto de mensagem tem dois métodos adicionais toBytesefromBytesque convertem de e para o bytestream. Eu uso chaves de roteamento que não deixam dúvidas quanto ao tipo de mensagem que o consumidor está recebendo. A mensagem é serializável. Isso funciona bem, mas é limitante, pois só posso usá-lo com outros programas Java.

  2. O tamanho da mensagem é limitado pela memória no servidor e, se for persistente, também pelo espaço livre no HDD. Você provavelmente não deseja enviar mensagens muito grandes; pode ser melhor enviar uma referência a um arquivo ou banco de dados.

    Você também pode querer ler sobre suas medidas de desempenho: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / rabbitmq-performance-medições-parte 2 /

  3. As filas são muito leves, você provavelmente estará limitado pelo número de conexões que possui. Provavelmente dependerá do servidor. Aqui estão algumas informações sobre uma questão semelhante: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

robthewolf
fonte
9

O tamanho máximo da mensagem no RabbitMQ era de 2 GiB antes da versão 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).

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

Foi 512 MiB desde a versão 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).

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

Maggyero
fonte
4
  1. Veja a resposta de robthewolf .

  2. O tamanho máximo da mensagem é 2 GB, no entanto, o ajuste de desempenho para mensagens desse tamanho não é eficaz. Tamanho máximo da mensagem

  3. Não há um limite rígido imposto pelo RabbitMQ Server Software no número de filas, no entanto, o hardware em que o servidor está sendo executado pode muito bem impactar esse limite.

3a. Não há limite de comprimento de fila imposto pelo servidor por padrão. Você pode, entretanto, limitar isso por meio da política do lado do servidor (configuração) ou política do lado do cliente. Comprimento máximo da fila

Há mais informações e links em uma postagem relacionada .

JerodG
fonte