RabbitMQの之消費者のプリフェッチ

概要

プリフェッチによるメッセージは、消費者のプリフェッチ機構の拡張します。

AMQP 0-9-1指定basic.qosようなチャネル(一つの接続)の方法においては、消費者通知メッセージの数を制限することができません。残念ながら、好ましい範囲チャネルではない-キュー、キュー複数のチャネルから単一チャネル、および送信される各メッセージはお互いにこの制限を超えないことを確実にするために調整する必要に消費することができます。クラスタからの消費が非常に遅くなりますが、遅くなる単一のマシン上で。

また、多くの場合のために、各消費者に適用される指定より自然カウントプリフェッチ。

したがって、RabbitMQのは、再定義basic.qosの方法global記号の意味は:

グローバル 意味prefetch_countAMQP 0-9-1で 意味prefetch_countRabbitMQの中
共有チャネル上のすべての消費者 これらは、チャネル上でそれぞれの新しい消費者に適用されました
接続の共有のすべての消費者 共有チャネル上のすべての消費者

APIのほとんどのではglobalデフォルトのフラグはfalseです。

個々の消費者

次の例のJava、実質的に認められていない最後に受信したメッセージ10まで:

Channel channel = ...;
Consumer consumer = ...;
channel.basicQos(10); // Per consumer limit
channel.basicConsume("my-queue", false, consumer);

独立した消費者

この例では、2つの消費者対応の、各設定されたチャネルは、独立したと同時に最大10件の未確認のメッセージを受信します。

Channel channel = ...;
Consumer consumer1 = ...;
Consumer consumer2 = ...;
channel.basicQos(10); // Per consumer limit
channel.basicConsume("my-queue1", false, consumer1);
channel.basicConsume("my-queue2", false, consumer2);

より多くの消費者が制限を共有します

AMQP 0-9-1異なると説明は説明していないglobal兆候が何度も呼び出さbasic.qos何が起こりますか。RabbitMQの両方のプリフェッチ制限は互いに独立した実行意志説明、消費者は、2つの限界に達していない場合にメッセージを取得しました。
例:

Channel channel = ...;
Consumer consumer1 = ...;
Consumer consumer2 = ...;
channel.basicQos(10, false); // Per consumer limit
channel.basicQos(15, true);  // Per channel limit
channel.basicConsume("my-queue1", false, consumer1);
channel.basicConsume("my-queue2", false, consumer2);

2つの消費者の間で15の未確認のニュースがあり、各消費者は10のメッセージの最大を持っています。これは、チャネルとキューはグローバルな制限を行っているので、前の例よりも小さいが、低速であることコーディネートから生じた追加費用が発生します。

:からの翻訳
1. https://www.rabbitmq.com/consumer-prefetch.html

おすすめ

転載: blog.csdn.net/qq_35958788/article/details/93418740