10.2.2. メッセージのブロック
複数のプロデューサーを同じアドレスに関連付けることができるので、実際に利用できるものよりも、ブローカーがすべてのプロデューサーにクレジットを割り当てることができます。ただし、ブローカーが利用可能な量よりも多くのクレジットを送信できないアドレスに最大サイズを設定できます。
デフォルトの設定では、各アドレスにグローバル最大サイズ 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
プロデューサーに設定されます。
<configuration> <core> ... <address-settings> <address-setting match="my.blocking.queue"> 1 <max-size-bytes>300000</max-size-bytes> 2 <address-full-policy>BLOCK</address-full-policy> 3 </address-setting> </address-settings> </core> </configuration>