web-dev-qa-db-ja.com

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

  1. RabbitMQキューに保存できるメッセージは何ですか?ひもだけ?または、int、バイナリ、文字列など、保存するタイプを選択できますか?
  2. 1つのメッセージの最大サイズは?
  3. いくつのキューまたはエクスチェンジを作成できますか?または、サーバーの電力に依存しますか?
92
tuchk4
  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/blog/2012/04/25/rabbitmq-performance-measurements-part-2/

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

108
robthewolf

RabbitMQの最大メッセージサイズは、バージョン3.7までは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.13/include/rabbit.hrl#L279

バージョン3.8からは、現在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/master/include/rabbit.hrl#L238

6
Maggyero
  1. robthewolf's answer を参照してください。

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

  3. RabbitMQサーバーソフトウェアによってキューの数に強い制限はありませんが、サーバーが実行されているハードウェアがこの制限に非常に大きな影響を与える可能性があります。

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

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

4
JerodG