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>
1
上記の設定は、my.blocking.queue アドレス によって参照されるキューに適用されます。
2
最大サイズを 300000 バイトに設定します。メッセージが max-size-bytes を超えると、ブローカーはプロデューサーがアドレスに送信をブロックします。この要素は、K、Mb、GB などのバイト表記に対応していることに注意してください。
3
address-full-policyBLOCK に設定し、プロデューサーフロー制御のブロックを有効にします。