Подтвердить что ты не робот

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

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

Ответ 1

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

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

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

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

    Вы также можете ознакомиться с их показателями эффективности: 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/

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

Ответ 2

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

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

Теперь он составляет 512 МБ с версии 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).

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

Ответ 3

  • См. ответ robthewolf.

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

  • Не существует жесткого ограничения, установленного RabbitMQ Server Software на количество очередей, однако аппаратное обеспечение, на котором работает сервер, может очень сильно повлиять на этот предел.

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

Дополнительная информация и ссылки на сообщение