26

私はRabbitMQをうまく使っています。ただし、キューに大量のメッセージがある場合、コンシューマー (Windows サービス) がそれらすべてを取得しようとし、それらを保持するだけでアクションや確認を行わないという問題があります。

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

コンシューマーが一度に試行して責任を負うメッセージの最大数を構成する方法はありますか?

これを制限するための正しい設定がRequestedChannelMaxオンになっていることがわかりますか?RabbitMQ.Client.ConnectionFactory

ありがとう

4

1 に答える 1

39

コンシューマーは、デフォルトで、コンシューマーによる実際のメッセージ処理時間に関係なく、帯域幅が処理できる限り多くのメッセージを読み取ります。

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

このブログ投稿は、スループットの最適化に関心があり、ページの約 2/3 でのプリフェッチについて話している場合に興味深い読み物です。

それが役立つことを願っています!

于 2013-10-03T16:03:03.683 に答える