2016-05-09 17 views
2

次の構成(最新のSpringのバージョン)を使用するときの動作は何ですか?私はドキュメントでそれを見つけることができません。RabbitListener複数のキューの振る舞い

@RabbitListener(queues = {"q1", "q2", "q3"}) 
public class MyListener { 

3つのキューからのメッセージはどの順番で処理されますか?

答えて

2

コンシューマチャネルで操作が実行されるのは不確定です(コンシューマコンシューマを増やした場合、コンシューマ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)が使用されます。これは、プリフェッチがコンシューマごとであることを意味します。