次の構成(最新のSpringのバージョン)を使用するときの動作は何ですか?私はドキュメントでそれを見つけることができません。RabbitListener複数のキューの振る舞い
@RabbitListener(queues = {"q1", "q2", "q3"})
public class MyListener {
3つのキューからのメッセージはどの順番で処理されますか?
次の構成(最新のSpringのバージョン)を使用するときの動作は何ですか?私はドキュメントでそれを見つけることができません。RabbitListener複数のキューの振る舞い
@RabbitListener(queues = {"q1", "q2", "q3"})
public class MyListener {
3つのキューからのメッセージはどの順番で処理されますか?
コンシューマチャネルで操作が実行されるのは不確定です(コンシューマコンシューマを増やした場合、コンシューマ1つにつき3つです)。 basicConsume
操作は、通常、キューが定義された順序で実行されます(すべての場合、1つ以上のキューが一時的に「欠落している」場合を除きます)。
ブローカは、キューごとにメッセージを(basicQos
)まで(デフォルトは1)送信します。
このシナリオでブローカが使用している実際のアルゴリズムはわかりませんが、不確定であると想定する必要があります。春のAMQPはブローカから受信した順序でリスナーに配信します。
私はちょうど(2つの既存のメッセージで2つのキューごと)テストを実行し、彼らはラウンドロビン配信された
EDIT - q1m1、q2m1、q1m2、q2m2プリフェッチだった1
プリフェッチを4に設定すると、q1m1、q1m2、q2m1、q2m2が表示されます。
もちろん、キューが空の場合、メッセージは通常、ブローカに到着した順序で到着します。
EDIT2
Consumer Prefetchを参照してください。
Spring AMQPでは、グローバル引数を持たないbasicQos
バリアントが使用されるため、デフォルト(false
)が使用されます。これは、プリフェッチがコンシューマごとであることを意味します。