6

私はプロジェクトでRabbitMQWeb-STOMPを使用しており、それは私にとって非常に良いことですが、1つの問題があります。コンシューマーがキューにサブスクライブすると、キューからすべてのメッセージが即座に取得されます。私の場合、メッセージタスクには時間がかかる可能性があり、前のメッセージが完了したときにのみ、コンシューマーがキューから次のメッセージを取得する必要があります。

コンシューマーがサブスクライブされた後に公開が開始されると、すべて正常に機能しますが、既にキューにメッセージがある場合、最初にサブスクライブされたコンシューマーはすべてのメッセージを取得し、他のコンシューマーは無料のままになります。前のメッセージがACKされたときにのみ次のメッセージを消費するnode-amqpqueue.shift()メソッドのようなものはありますか?

4

1 に答える 1

5

(どのクライアントを使用していますか?)

あなたの質問への答えはbasic_qosamqpリファレンスを参照して検索してくださいbasic.qos

c#APIでは、次のようにします。

int prefetch = 10;

IModel channel = connection.CreateModel(); //where connection is IConnection
channel.basic_qos(0, prefetch, false);

プリフェッチサイズを使用して、ACKが送信されるまでにコンシューマーに送信するメッセージの数をrabbitmqサーバーに通知できます。NO-ACKオプションが設定されている場合、プリフェッチサイズは無視されます。

この値を設定すると、パフォーマンスに影響を与える可能性があることに注意してください。これを確認してください。

于 2012-11-29T11:14:25.930 に答える