2013-10-03 14 views
15

私はRabbitMQを正常に使用しています。しかし、キューにたくさんのメッセージがある状況に陥った場合、コンシューマ(Windowsサービス)はそれらをすべて取得しようとしてから、それらを保持しますが、決して動作しません。RabbitMQ消費者を抑制する方法

準備完了状態のメッセージの数が少なく、消費者がスループットを細かく処理すると、問題が発生し、バックログがある場合には貪欲になりすぎます。

消費者が一度に試して責任を負うメッセージの最大数を設定する方法はありますか?

私はRabbitMQ.Client.ConnectionFactoryRequestedChannelMaxのフィールドがこれを制限する正しい設定であることがわかりますか?帯域幅は、消費者が関係なく、実際のメッセージ処理時間の扱うことができるよう、デフォルトで

おかげ

+0

関連:http://stackoverflow.com/questions/29841690/how-to-consume-one-message – Nav

答えて

21

消費者は、できるだけ多くのメッセージを読み込みます。

チャネルのQoS(Quality of Service)を変更してプリフェッチ値を設定して、一度に取り上げようとするメッセージの数を制限する必要があります。 basic.qos hereをチェックしてください。 3つのパラメータ、サイズ(オクテット単位)、カウント(一度に取り上げるメッセージ全体の数)、およびグローバルフラグがあります。

This blog postは、スループットを最適化することに興味があり、ページの下り方向の約2/3の先読みについて話している場合はお読みください。

希望に役立ちます!

+1

これは非常に包括的な答えです。 '_model.BasicQos(0,100、false);' – baynezy

関連する問題