RabbitMQメッセージのサイズとタイプ


97
  1. RabbitMQキューに保存できるメッセージは何ですか?文字列だけ?または、int、binary、stringなど、保存するタイプを選択できますか?
  2. 1つのメッセージの最大サイズはいくつですか?
  3. いくつのキューまたは交換を作成できますか?それともサーバーのパワーに依存しますか?

回答:


117
  1. 理論的には、何でもメッセージとして保存/送信できます。実際には、キューに何も保存する必要はありません。ほとんどの場合、キューが空の場合、システムは最も効率的に機能します。次の2つの前提条件を使用して、キューに何でも送信できます。

    • 送信しているものは、バイト文字列との間で変換できます
    • 消費者はそれが何を取得しているか、それを元のオブジェクトに変換する方法を正確に知っています

    文字列は非常に簡単で、バイトとの間で変換するための組み込みメソッドがあります。文字列であることがわかっている場合は、元に戻す方法を知っています。最良のオプションは、XML、JSON、YMLなどのマークアップ文字列を使用することです。このようにして、オブジェクトを文字列に変換し、元のオブジェクトに戻すことができます。それらはプログラミング言語を越えて機能するので、オブジェクトを理解する方法を知っていれば、コンシューマーをプロデューサーに対して異なる言語で書くことができます。私はJavaで働いています。フィールドにサブオブジェクトを含む複雑なメッセージを送信したい。自分のメッセージオブジェクトを使用します。メッセージオブジェクトには2つの追加メソッドがtoBytesあり、fromBytesバイトストリームとの間で変換を行います。私は、コンシューマーが受信するメッセージのタイプについて疑いのないルーティングキーを使用しています。メッセージはシリアライズ可能です。これは問題なく動作しますが、他のJavaプログラムでしか使用できないため、制限があります。

  2. メッセージのサイズはサーバーのメモリによって制限されます。メッセージが永続的である場合は、HDDの空き容量も制限されます。おそらく、大きすぎるメッセージを送信したくないでしょう。ファイルまたはDBへの参照を送信することをお勧めします。

    また、パフォーマンスの測定値を確認することもできます 。http//www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ブログ/ 2012/04/25 / rabbitmq-performance-measurements-part-2 /

  3. キューはかなり軽量であり、ほとんどの場合、接続数によって制限されます。おそらくサーバーに依存します。同様の質問に関するいくつかの情報は次のとおりです:http : //lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html


9

RabbitMQ の最大メッセージサイズは、バージョン3.8.0より前は2 GiBでした。

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

リファレンス:https : //github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238


4
  1. robthewolfの回答を参照してください。

  2. メッセージの最大サイズは2GBですが、このサイズのメッセージのパフォーマンス調整は効果的ではありません。最大メッセージサイズ

  3. キューの数にRabbitMQサーバーソフトウェアによって課されるハード制限はありませんが、サーバーが実行されているハードウェアがこの制限に非常によく影響する場合があります。

3a。デフォルトでは、サーバーによって課されるキューの長さの制限はありません。ただし、サーバー側のポリシー(構成)またはクライアント側のポリシーを使用してこれを制限できます。キューの最大長

関連する投稿に詳細とリンクがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.