RabbitMQ'da mesajların, kuyrukların ve değişimlerin sınırları nelerdir?


100
  1. İzin verilen mesaj türleri (dizeler, baytlar, tam sayılar vb.) Nelerdir?
  2. Bir mesajın maksimum boyutu nedir?
  3. Maksimum sıra ve değişim sayısı nedir?

Yanıtlar:


117
  1. Teorik olarak her şey bir mesaj olarak saklanabilir / gönderilebilir. Aslında kuyruklarda hiçbir şey saklamak istemezsiniz. Kuyruklar çoğu zaman boşsa sistem en verimli şekilde çalışır. Sıraya iki ön koşulla istediğiniz her şeyi gönderebilirsiniz:

    • Gönderdiğiniz şey, bir testten dönüştürülebilir
    • Tüketici tam olarak ne elde ettiğini ve onu orijinal nesneye nasıl dönüştüreceğini bilir.

    Dizeler oldukça kolaydır, baytlara ve baytlardan dönüştürme için yerleşik bir yöntemi vardır. Bunun bir dize olduğunu biliyorsanız, onu nasıl geri dönüştüreceğinizi biliyorsunuzdur. En iyi seçenek XML, JSON veya YML gibi bir işaretleme dizesi kullanmaktır. Bu şekilde, nesneleri Dizelere ve tekrar orijinal nesnelere dönüştürebilirsiniz; programlama dillerinde çalışırlar, böylece tüketiciniz, nesneyi nasıl anlayacağını bildiği sürece üreticinize farklı bir dilde yazılabilir. Java'da çalışıyorum. Alanlardaki alt nesnelerle karmaşık mesajlar göndermek istiyorum. Kendi mesaj nesnemi kullanıyorum. Mesaj nesnesinin iki ek yöntemi vardır toBytesvefromBytesbytestream'e dönüşür. Tüketicinin ne tür bir mesaj aldığına dair hiçbir şüphe bırakmayan yönlendirme anahtarları kullanıyorum. Mesaj Seri hale getirilebilir. Bu iyi çalışıyor, ancak onu yalnızca diğer Java programlarıyla kullanabildiğim için sınırlayıcı.

  2. Mesajın boyutu, sunucudaki bellek ile sınırlıdır ve eğer kalıcıysa, o zaman da boş HDD alanı da olur. Muhtemelen çok büyük mesajlar göndermek istemezsiniz; bir dosya veya DB'ye referans göndermek daha iyi olabilir.

    Ayrıca performans ölçülerini de okumak isteyebilirsiniz: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / rabbitmq-performans-ölçümleri-part-2 /

  3. Kuyruklar oldukça hafiftir, büyük olasılıkla sahip olduğunuz bağlantı sayısı ile sınırlı olacaksınız. Büyük olasılıkla sunucuya bağlı olacaktır. İşte benzer bir soru hakkında bazı bilgiler: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html


10

Bir mesajın maksimum boyutu nedir?

Maksimum mesaj boyutu RabbitMQ içinde eskiden GiB 2 sürümü 3.8.0 öncesi:

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

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

It has been 512 MiB sürümü 3.8.0 beri:

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

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


4
  1. Robthewolf'un cevabına bakın .

  2. Maksimum mesaj boyutu 2 GB'dir, ancak bu boyuttaki mesajlar için performans ayarı etkili değildir. Maksimum Mesaj Boyutu

  3. RabbitMQ Sunucu Yazılımının kuyruk sayısına dair kesin bir sınırı yoktur, ancak sunucunun üzerinde çalıştığı donanım bu limiti çok iyi etkileyebilir.

3 A. Varsayılan olarak sunucu tarafından uygulanan bir kuyruk uzunluğu sınırı yoktur. Ancak, bunu sunucu tarafı politikası (yapılandırma) veya istemci tarafı politikası ile sınırlandırabilirsiniz. Maksimum Sıra Uzunluğu

Daha fazla bilgi ve bir üzerinde bağlantıları vardır ilgili yazı .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.