2012-11-29 10 views
5

私は自分のプロジェクトでRabbitMQ Web-STOMPを使用しています。とてもうれしいですが、問題が1つあります。コンシューマがキューに登録すると、キューからすべてのメッセージが即座に取得されます。私の場合、メッセージタスクには時間がかかることがあり、消費者は前回の完了時にだけキューから次のメッセージを取得する必要があります。RabbitMQ STOMPが以前にACKするまでメッセージの消費を停止する方法はありますか?

すべては、消費者の後に公開開始が加入している場合、正常に動作しますが、キューにすでにメッセージがあるとき、最初の消費者はそれらのすべてを取得する加入と他の人が無料にてご利用いただけます。以前にACKがあった場合にのみ次のメッセージを消費するnode-amqp queue.shift()メソッドなどがありますか?

答えて

4

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

あなたの質問への答えはbasic_qosで、amqp referenceを参照してください、あなたは次のことを行うとC#のAPIでbasic.qos

を検索:

int prefetch = 10; 

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

プリフェッチ・サイズは、それらがACK'dされるまで、消費者にまで送るためにどのように多くのメッセージのRabbitMQサーバーを伝えるために使用することができます。 NO-ACKオプションが設定されている場合、プリフェッチサイズは無視されます。

この値を設定すると、パフォーマンスに影響を与える可能性があるので、thisを参照してください。

+0

私はRabbitMQのウェブ使用 - ブラウザJSと** STOMP **を。私はすでにC#やnode.jsを使って対処する方法を知っていますが、STOMPにはQoSがありますか? ...私の目だった –

+1

は、プリフェッチを設定します!もちろん、 "prefetch-count":SUBSCRIBEのヘッダーが1つの答えです、ありがとうございます! –

+1

をSUBSCRIBEためのクライアント・ヘッダー私のために動作しません:1 CONNECTヘッダーとACK: –

関連する問題