第10章 フロー制御
フロー制御は、プロデューサーとコンシューマー間のデータのフローを制限することで、プロデューサーとコンシューマーの超過を防ぎます。AMQ Broker を使用すると、コンシューマーとプロデューサーの両方のフロー制御を設定できます。
10.1. プロデューサーフロー制御 リンクのコピーリンクがクリップボードにコピーされました!
コンシューマーウィンドウベースのフロー制御と同様に、AMQ Broker はプロデューサーからブローカーに送信されるデータ量をブローカーに制限し、ブローカーが大量のデータで過負荷にならないようにすることができます。プロデューサーの場合、ウィンドウサイズは 1 度にインフライトにできるバイト数を決定します。
10.1.1. メッセージのブロック リンクのコピーリンクがクリップボードにコピーされました!
複数のプロデューサーを同じアドレスに関連付けることができるので、実際に利用できるものよりも、ブローカーがすべてのプロデューサーにクレジットを割り当てることができます。ただし、ブローカーが利用可能な量よりも多くのクレジットを送信できないアドレスに最大サイズを設定できます。
デフォルトの設定では、各アドレスにグローバル最大サイズ 100Mb が使用されます。アドレスが満杯になると、ブローカーはキューにルーティングする代わりに、ページングジャーナルにさらにメッセージを書き込みます。ページングの代わりに、古いメッセージが消費されるまで、クライアント側でより多くのメッセージの送信をブロックできます。このようにプロデューサーフロー制御をブロックすると、プロデューサーが一度に処理できる数を超えるメッセージを送信するため、ブローカーがメモリー不足になるのを防ぎます。
この設定では、プロデューサーフロー制御のブロックは address-setting ごとに管理されます。この設定は、アドレスに登録されているすべてのキューに適用されます。つまり、そのアドレスにバインドされるすべてのキューの合計メモリーは max-size-bytes に指定された値によって上限になります。
ブロックはプロトコルに依存します。AMQ Broker では、AMQP、OpenWire、および Core Protocol はプロデューサーフロー制御をサポートします。しかし、AMQP はフロー制御方法が異なります。詳細は、AMQP を使用したフロー制御のブロックを参照してください。
アドレスの最大サイズの設定
メッセージが設定された最大バイト数よりも大きい場合にブローカーを設定するには、BROKER_INSTANCE_DIR/etc/broker.xml に新しい addres-setting 設定要素を追加します。
手順
-
以下の設定例の場合、
address-settingは最大サイズ300000バイトに達すると、メッセージの送信からBLOCKプロデューサーに設定されます。
10.1.2. AMQP メッセージのブロック リンクのコピーリンクがクリップボードにコピーされました!
本章で前述したように、Core Protocol はプロデューサーのウィンドウサイズのフロー制御システムを使用します。このシステムでは、クレジットはバイトを表し、プロデューサーに割り当てられます。プロデューサーがメッセージを送信する場合は、送信する前にメッセージのサイズに対応するのに十分なクレジットがあるまで待機する必要があります。
しかし、AMQP フロー制御のクレジットはバイトを表すのではなく、メッセージサイズに関係なく、プロデューサーが送信できるメッセージの数を表します。そのため、AMQP クライアントがアドレスの max-size-bytes を大幅に超過するシナリオが考えられます。
この状況を管理するには、要素 max-size-bytes-reject-threshold を address-setting に追加し、アドレスサイズの上限をバイト単位で指定します。この上限に達すると、ブローカーは AMQP メッセージを拒否します。デフォルトでは、max-size-bytes-reject-threshold は -1 に設定されているか、制限なしに設定されます。
AMQP メッセージをブロックするブローカーの設定
AMQP メッセージが設定された最大バイト数よりも大きい場合にブローカーを設定するには、BROKER_INSTANCE_DIR/etc/broker.xml に新しい addres-setting 設定要素を追加します。
手順
以下の設定例は、最大サイズ
300000バイトをmy.amqp.blocking.queueアドレスにルーティングされる AMQP メッセージに適用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連資料
- AMQP プロデューサーにクレジットを設定する方法は、3章ネットワーク接続: プロトコル を参照してください。