この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 23648|答える: 0

RabbitMQ BasicQos 消費者並列処理の制限

[リンクをコピー]
掲載地 2018/04/10 22:36:02 | | | |


まず第一に、rabbitmqサーバーに未処理のメッセージが100件あります。ランダムにコンシューマークライアントを開くと、次のような状況が表示されます。

100件のデータが一瞬で転送されるのに、単一のクライアントで同時にこれほど多くのデータを処理できないのに、どうすればいいのでしょうか?




上の画像に示されている通り、メッセージの受信確認はしていません! 生産者が送り続ければ、私たち消費者もこれからも届き続けるでしょう!

例えば、1人の消費者が1分間に最大60件のメッセージを処理できるとしますが、生産者は1分間に300件のメッセージを送る場合、私たちのコンシューマークライアントは、1分間に同時に300件のメッセージを受け取る必要があり、最大負荷を超えているため、サーバーリソースが使い果たされてコンシューマクライアントが止まる可能性があります
RabbitMQはQoS(サービス品質)機能を提供しますすなわち、メッセージの非自動確認の前提のもと、一定数のメッセージ(消費またはチャネルに基づいてQosの値を設定して)が確認されなければ、新しいメッセージは消費されません。



prefetchSize:0
prefetchCount:RabbitMQに対して、同時にN個以上のメッセージを消費者にプッシュしないよう指示します。つまり、まだAckされていないN個のメッセージがあると、Ackが出るまで消費者はブロックします
global:true/false 上記の設定がチャネルに適用されるか、簡単に言えば、上記の制限がチャネルレベルか消費者レベルか
注:prefetchSizeとglobalはrabbitmqによって実装されていないと言われているので、当面は勉強しません


prefetch_count no_ask=偽の場合に効果が現れますつまり、自動回答の場合、これら2つの値は次のようになります効力がない

BasicQosメソッドでprefetchCount = 3を設定します。 これにより、RabbitMQは1つのコンシューマーにつき最大3つのメッセージを同時に処理できます。 言い換えれば、ACKを受け取るまでは消費者に新しいメッセージを配布しません。 設定方法は以下の通りです:





図に示すように、同時に2人の消費者がQueueを聴いていますが、ここでのメッセージは1人の消費者が消費した場合のみ自動的に登録され、もう一方の消費者はこのメッセージを受け取ることはありません。

公式ウェブサイト紹介:http://www.rabbitmq.com/consumer-prefetch.html

この方法ではキューが満杯になることがあります。 もちろん、設計を洗練させるために、より多くのコンシューマーを追加したり、仮想ホストを作成する必要があるかもしれません。





先の:EFは一括データベースの挿入、更新、削除を実装しています
次に:IIS Expressのウェブサーバーは起動できませんでした
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com