Размер и типы сообщений RabbitMQ

97
  1. Какие сообщения можно хранить в очередях RabbitMQ? Только струны? Или я могу выбрать тип, который я хочу сохранить: int, binary, string и т. Д.?
  2. Каков максимальный размер одного сообщения?
  3. Сколько очередей или обменов можно создать? Или это зависит от мощности сервера?
tuchk4
источник

Ответы:

117
  1. Теоретически все может быть сохранено / отправлено в виде сообщения. На самом деле вы не хотите ничего хранить в очередях. Система работает наиболее эффективно, если очереди большую часть времени пусты. Вы можете отправить все, что хотите, в очередь с двумя предварительными условиями:

    • То, что вы отправляете, может быть преобразовано в байтовую строку и обратно
    • Потребитель точно знает, что он получает и как преобразовать его в исходный объект.

    Строки довольно просты, у них есть встроенный метод преобразования в байты и обратно. Если вы знаете, что это строка, вы знаете, как ее преобразовать обратно. Наилучший вариант - использовать строку разметки, например XML, JSON или YML. Таким образом вы можете преобразовывать объекты в строки и обратно в исходные объекты; они работают на разных языках программирования, поэтому ваш потребитель может быть написан на языке, отличном от вашего производителя, если он знает, как понимать объект. Я работаю на Яве. Я хочу отправлять сложные сообщения с подобъектами в полях. Я использую свой собственный объект сообщения. У объекта сообщения есть два дополнительных метода toBytesиfromBytesкоторые преобразуются в байтовый поток и обратно. Я использую ключи маршрутизации, которые не оставляют сомнений в том, какое сообщение получает потребитель. Сообщение является сериализуемым. Это работает нормально, но ограничивает, так как я могу использовать его только с другими программами Java.

  2. Размер сообщения ограничен памятью на сервере, а если оно постоянное, то также свободным местом на жестком диске. Вероятно, вы не хотите отправлять слишком большие сообщения; может быть лучше отправить ссылку на файл или БД.

    Вы также можете ознакомиться с их показателями производительности: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ блог / 2012/04/25 / rabbitmq-performance-sizes-часть-2 /

  3. Очереди довольно легкие, вы, скорее всего, будете ограничены количеством подключений, которые у вас есть. Скорее всего, это будет зависеть от сервера. Вот информация по похожему вопросу: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-Feb February/ 003042.html

ограбить волк
источник
9

Максимальный размер сообщения в RabbitMQ было 2 Гигабайт до версии 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).

Ссылка: https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

С версии 3.8.0 его размер составляет 512 МБ :

%% 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).

Ссылка: https://github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238

Maggyero
источник
4
  1. См . Ответ robthewolf .

  2. Максимальный размер сообщения составляет 2 ГБ, однако настройка производительности для сообщений такого размера неэффективна. Максимальный размер сообщения

  3. Серверное программное обеспечение RabbitMQ не устанавливает жестких ограничений на количество очередей, однако оборудование, на котором работает сервер, может очень сильно повлиять на это ограничение.

3а. По умолчанию сервер не устанавливает ограничения на длину очереди. Однако вы можете ограничить это с помощью политики (конфигурации) на стороне сервера или политики на стороне клиента.Максимальная длина очереди

Больше информации и ссылок можно найти в соответствующем посте .

JerodG
источник