Rozmiar i typy wiadomości RabbitMQ

97
  1. Jakie wiadomości mogą być przechowywane w kolejkach RabbitMQ? Tylko struny? Czy mogę wybrać typ, który chcę przechowywać: int, binary, string itp.?
  2. Jaki jest maksymalny rozmiar jednej wiadomości?
  3. Ile kolejek lub giełd można utworzyć? A może zależy to od mocy serwera?
tuchk4
źródło

Odpowiedzi:

117
  1. Teoretycznie wszystko można zapisać / wysłać jako wiadomość. Właściwie nie chcesz niczego przechowywać w kolejkach. System działa najskuteczniej, gdy kolejki są przez większość czasu puste. Możesz wysłać wszystko, co chcesz, do kolejki z dwoma warunkami wstępnymi:

    • Wysyłany przez Ciebie przedmiot może zostać przekonwertowany na iz bajtowania
    • Konsument dokładnie wie, co otrzymuje i jak przekształcić to w oryginalny przedmiot

    Łańcuchy są dość łatwe, mają wbudowaną metodę konwersji do i z bajtów. Jeśli wiesz, że jest to ciąg, wiesz, jak go przekonwertować. Najlepszą opcją jest użycie łańcucha znaczników, takiego jak XML, JSON lub YML. W ten sposób możesz konwertować obiekty na Ciągi iz powrotem na oryginalne obiekty; działają w różnych językach programowania, więc Twój konsument może być napisany w innym języku niż Twój producent, o ile wie, jak zrozumieć obiekt. Pracuję w Javie. Chcę wysyłać złożone wiadomości z obiektami podrzędnymi w polach. Używam własnego obiektu wiadomości. Obiekt wiadomości ma dwie dodatkowe metody toBytesifromBytesktóre konwertują do i ze strumienia bajtowego. Używam kluczy routingu, które nie pozostawiają wątpliwości, jaki typ wiadomości otrzymuje konsument. Wiadomość jest serializowalna. Działa to dobrze, ale jest ograniczone, ponieważ mogę go używać tylko z innymi programami Java.

  2. Rozmiar wiadomości jest ograniczony pamięcią na serwerze, a jeśli jest trwały, to również wolne miejsce na dysku twardym. Prawdopodobnie nie chcesz wysyłać zbyt dużych wiadomości; lepiej byłoby wysłać odniesienie do pliku lub bazy danych.

    Możesz również przeczytać informacje o ich miarach wydajności: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / pomiary-wydajnościowe-rabbitmq-część-2 /

  3. Kolejki są dość lekkie, najprawdopodobniej będziesz ograniczony liczbą posiadanych połączeń. Najprawdopodobniej będzie to zależeć od serwera. Oto kilka informacji na podobne pytanie: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-Feb February / 003042.html

robthewolf
źródło
9

Rozmiar wiadomości maksymalna w RabbitMQ było 2 GiB przed wersją 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ódła: https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

Od wersji 3.8.0 minęło 512 MiB :

%% 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ódła: https://github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238

Maggyero
źródło
4
  1. Zobacz odpowiedź robthewolfa .

  2. Maksymalny rozmiar wiadomości to 2 GB, jednak dostrajanie wydajności wiadomości o tym rozmiarze nie jest skuteczne. Maksymalny rozmiar wiadomości

  3. Nie ma sztywnego limitu narzuconego przez oprogramowanie RabbitMQ Server na liczbę kolejek, jednak sprzęt, na którym działa serwer, może mieć duży wpływ na ten limit.

3a. Domyślnie serwer nie narzuca ograniczenia długości kolejki. Można to jednak ograniczyć za pomocą zasad po stronie serwera (konfiguracji) lub zasad po stronie klienta. Maksymalna długość kolejki

Więcej informacji i linków znajdziesz na pokrewnym poście .

JerodG
źródło