4.18. リングキューの設定
通常、AMQ Broker のキューは first-in、first-out(FIFO) セマンティクスを使用します。これは、ブローカーがキューの末尾にメッセージを追加し、それらをヘッドから削除することを意味します。リングキューは、指定された数のメッセージを保持する特別なタイプのキューです。ブローカーは、新規メッセージが到達し、キューがすでに指定された数のメッセージを保持した場合にキューの先頭にメッセージを削除することで、固定キューのサイズを維持します。
たとえば、サイズ 3
で設定されたリングキューと、メッセージ A
、B
、C
、および D
を順番に送信するプロデューサーについて考えてみます。メッセージ C
がキューに到達すると、キュー内のメッセージ数が設定済みのリングサイズに達したことになります。この時点で、メッセージ A
はキューのヘッドにあり、メッセージ C
はテイールにあります。メッセージ D
がキューに到達すると、ブローカーはキューの末尾にメッセージを追加します。固定キューサイズを維持するために、ブローカーはキュー (メッセージ A)
の先頭にメッセージを削除します。メッセージ B
がキューの先頭にあるようになりました。
4.18.1. リングキューの設定
以下の手順では、リングキューを設定する方法を説明します。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 明示的なリングサイズが設定されていない一致するアドレスですべてのキューのデフォルトリングサイズを定義するには、address-
setting
要素にdefault-ring-size
の値を指定します。以下に例を示します。<address-settings> <address-setting match="ring.#"> <default-ring-size>3</default-ring-size> </address-setting> </address-settings>
default-ring-size
パラメーターは、自動作成されるキューのデフォルトサイズを定義する場合に特に便利です。default-ring-size
のデフォルト値は-1
(サイズ制限なし) です。特定のキューにリングサイズを定義するには、
queue
要素にring-size
キーを追加します。値を指定します。以下に例を示します。<addresses> <address name="myRing"> <anycast> <queue name="myRing" ring-size="5" /> </anycast> </address> </addresses>
ブローカーの実行中に ring-size
の値を更新できます。ブローカーは更新を動的に適用します。新しい ring-size
の値が以前の値よりも小さい場合、ブローカーはキューのヘッドからメッセージをすぐに削除し、新しいサイズを強制しません。キューに送信された新しいメッセージは、古いメッセージの削除を強制的に実行しますが、キューはクライアントによる通常の消費を介して、自然に決まるまで、新しいサイズに到達しません。