Jenis dan ukuran pesan RabbitMQ

97
  1. Pesan apa yang bisa disimpan dalam antrian RabbitMQ? Hanya string? Atau dapatkah saya memilih tipe yang ingin saya simpan: int, binary, string, dll.?
  2. Berapa ukuran maksimal satu pesan?
  3. Berapa banyak antrian atau pertukaran yang bisa dibuat? Atau apakah itu tergantung pada kekuatan server?
tuchk4.dll
sumber

Jawaban:

117
  1. Secara teoritis apapun dapat disimpan / dikirim sebagai pesan. Anda sebenarnya tidak ingin menyimpan apa pun di antrean. Sistem bekerja paling efisien jika antrian kosong hampir sepanjang waktu. Anda dapat mengirim apa pun yang Anda inginkan ke antrean dengan dua prasyarat:

    • Hal yang Anda kirim dapat dikonversi ke dan dari bytestring
    • Konsumen tahu persis apa yang didapatnya dan bagaimana mengubahnya menjadi benda aslinya

    String cukup mudah, mereka memiliki metode bawaan untuk mengonversi ke dan dari byte. Jika Anda tahu itu adalah string, maka Anda tahu cara mengubahnya kembali. Opsi terbaik adalah menggunakan string markup seperti XML, JSON, atau YML. Dengan cara ini Anda dapat mengubah objek menjadi String dan kembali lagi ke objek aslinya; mereka bekerja di berbagai bahasa pemrograman sehingga konsumen Anda dapat menulis dalam bahasa yang berbeda untuk produser Anda selama ia tahu bagaimana memahami objeknya. Saya bekerja di Jawa. Saya ingin mengirim pesan kompleks dengan sub objek di lapangan. Saya menggunakan objek pesan saya sendiri. Objek pesan memiliki dua metode tambahan toBytesdanfromBytesyang mengkonversi ke dan dari bytestream. Saya menggunakan kunci perutean yang tidak diragukan lagi seperti apa jenis pesan yang diterima konsumen. Pesannya Dapat Disambung. Ini berfungsi dengan baik, tetapi membatasi karena saya hanya dapat menggunakannya dengan program Java lainnya.

  2. Ukuran pesan dibatasi oleh memori di server, dan jika tetap ada maka juga ruang HDD yang kosong. Anda mungkin tidak ingin mengirim pesan yang terlalu besar; mungkin lebih baik mengirim referensi ke file atau DB.

    Anda mungkin juga ingin membaca tentang ukuran kinerja mereka: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / rabbitmq-pengukuran-bagian-2 /

  3. Antrean cukup ringan, kemungkinan besar Anda akan dibatasi oleh jumlah koneksi yang Anda miliki. Kemungkinan besar itu akan tergantung pada server. Berikut ini beberapa info tentang pertanyaan serupa: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

robthewolf
sumber
9

The ukuran pesan maksimum di RabbitMQ adalah 2 GiB sebelum versi 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).

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

Sudah 512 MiB sejak versi 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).

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

Maggyero
sumber
4
  1. Lihat jawaban robthewolf .

  2. Ukuran pesan maksimal adalah 2GB, namun, penyesuaian kinerja untuk pesan sebesar ini tidak efektif. Ukuran Pesan Maks

  3. Tidak ada batasan tegas yang diberlakukan oleh Perangkat Lunak Server RabbitMQ pada jumlah antrian, namun, perangkat keras yang dijalankan server mungkin sangat memengaruhi batas ini.

3a. Tidak ada batasan panjang antrian yang diberlakukan oleh server secara default. Namun, Anda dapat membatasi ini melalui kebijakan sisi server (konfigurasi) atau kebijakan sisi klien. Panjang Antrian Maks

Ada lebih banyak informasi dan tautan pada posting terkait .

JerodG
sumber