1. ホーム
  2. rabbitmq

[解決済み] メッセージ、キュー、エクスチェンジの限界とは?

2022-11-20 20:18:01

質問

  1. 許容されるメッセージのタイプ (文字列、バイト、整数など) は何ですか?
  2. メッセージの最大サイズはどのくらいですか?
  3. キューとエクスチェンジの最大数は?

どのように解決するのですか?

  1. 理論的には何でもメッセージとして保存/送信することができます。 実際には、キューに何も保存したくありません。 システムは、キューがほとんどの時間、空である場合に最も効率的に動作します。 2つの前提条件があれば、キューに何でも送ることができます。

    • 送信するものは、バイト列との間で変換可能である。
    • コンシューマは何を得て、それをどのように元のオブジェクトに変換するかを正確に知っている



    文字列はとても簡単で、バイトと変換する方法が組み込まれています。 文字列であることが分かっていれば、どのように変換して戻せばよいかも分かっているはずです。 最良の選択肢は、XML、JSON、またはYMLのようなマークアップ文字列を使用することです。 この方法では、オブジェクトを文字列に変換して、また元のオブジェクトに戻すことができます。この方法は、プログラミング言語を超えて動作するので、オブジェクトを理解する方法さえ知っていれば、コンシューマーはプロデューサーと異なる言語で記述することができます。 私はJavaで仕事をしています。 フィールドにサブオブジェクトを持つ複雑なメッセージを送りたいのです。 私は、独自のメッセージ・オブジェクトを使っています。 このメッセージオブジェクトには、さらに2つのメソッドがあります。 toBytesfromBytes で、バイトストリームとの間で変換されます。 コンシューマが受け取るメッセージの種類を疑わないようなルーティングキーを使っています。 メッセージはSerializableです。 これはうまく機能しますが、他の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