web-dev-qa-db-ja.com

RabbitMQ-RabbitMQが単一のサーバーで処理できるキューの数

RabbitMQが単一のサーバーで処理できる最大キューの数を知りたいですか?

RAMに依存していますか?アーランプロセスに依存しますか?

47
Raj Sf

RabbitMQブローカー内にハードコーディングされた制限はありません。ブローカーはすべての利用可能なリソースを利用します(それらのいくつかに制限を設定しない限り、RabbitMQ用語ではwatermarksと呼ばれます)。

同時プロセスの最大数など、Erlang自体によっていくつかの制限がありますが、理論的に単一ノードでそれらに到達できる場合は、 分散機能 を使用することをお勧めします。

RabbitMQリソースの使用量と制限については多くの議論がありますが、

追伸ただし、AMQPプロトコルの制限があります。セクション 4.9制限 で説明されています

AMQP仕様は、AMQPの将来の拡張または同じワイヤレベル形式からのプロトコルにこれらの制限を課します。

  • 接続ごとのチャネル数:16ビットのチャネル番号。
  • プロトコルクラスの数:16ビットのクラスID。
  • プロトコルクラスごとのメソッドの数:16ビットのメソッドID。

AMQP仕様は、データに次の制限を課しています。

  • 短い文字列の最大サイズ:255オクテット。
  • 長い文字列またはフィールドテーブルの最大サイズ:32ビットサイズ。
  • フレームペイロードの最大サイズ:32ビットサイズ。
  • コンテンツの最大サイズ:64ビットサイズ。

サーバーまたはクライアントは、同時接続数、チャネルごとのコンシューマ数、キュー数などのリソースに独自の制限を課す場合もあります。これらは相互運用性に影響を与えず、指定されません。

46
pinepain

この投稿はあなたを助けることができます:

http://rabbitmq.1065348.n5.nabble.com/Max-messages-allowed-in-a-queue-in-RabbitMQ-td26063.html

[〜#〜] edit [〜#〜]

1)RabbitMQで許可される最大キュー?

数千(または数万)のキューでも問題はありませんが、各オブジェクト(キュー、交換、バインディングなど)はメモリやディスクスペースを占有します。デフォルトでは、Erlangは最大32768 IIRCの同時プロセス(つまり、軽量スレッド)を強制します。各キューは独自のプロセスで管理され、各接続はさらにいくつかの結果になる可能性があるため、単一のノード(?)に非常に多数のアクティブキューを配置し、それらをすべて同時に使用することを計画している場合、 + Pをより高い制限に設定して、ウサギがVMを渡すエミュレーター引数を微調整する必要がある場合があります。

また、各キュー/接続のオーバーヘッドが非常に速いだけで多くのGbを使い果たす可能性が高いため、数百万の両方を処理するにはかなり肉の多いサーバーが必要になります。 RAMに収まれば、数万個でも問題ありません。

22
Gabriele