4.12. 期限切れのメッセージを期限切れアドレスに移動する
最後の値キュー以外のキューでは、非破壊的なコンシューマーしかない場合、ブローカーはキューからメッセージを削除できず、キューのサイズが徐々に増加します。キューサイズで制約のない増加を防ぐには、メッセージの有効期限が切れるタイミングを設定し、ブローカーが期限切れのメッセージを移動するアドレスを指定します。
4.12.1. メッセージの有効期限の設定
以下の手順では、メッセージの有効期限を設定する方法を説明します。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 core
要素で、message-expiry-scan-period
を設定して、ブローカーが期限切れのメッセージをスキャンする頻度を指定します。<configuration ...> <core ...> ... <message-expiry-scan-period>1000</message-expiry-scan-period> ...
前述の設定に基づいて、ブローカーは 1000 ミリ秒ごとに期限切れのメッセージのキューをスキャンします。
一致するアドレスまたは一連のアドレスの
address-setting
要素で、有効期限切れのアドレスを指定します。また、メッセージの有効期限を設定します。以下に例を示します。<configuration ...> <core ...> ... <address-settings> ... <address-setting match="stocks"> ... <expiry-address>ExpiryAddress</expiry-address> <expiry-delay>10</expiry-delay> ... </address-setting> ... <address-settings> <configuration ...>
expiry-address
-
一致するアドレスや一連のアドレスの有効期限。前述の例では、ブローカーは
stocks
アドレスに対する期限切れメッセージをExpiryAddress
と呼ばれる期限切れアドレスに送信します。 expiry-delay
デフォルトの有効期限を使用するメッセージにブローカーが適用される有効期限 (ミリ秒単位)。デフォルトでは、メッセージの有効期限は
0
で、有効期限がないことを意味します。デフォルト以上の有効期限が設定されているメッセージに対しては、expiry-delay
は効果がありません。例えば、先ほどの例のように、アドレスの
expiry-delay
を10
に設定したとします。デフォルトの有効期限が0
のメッセージがこのアドレスのキューに到着した場合、ブローカーはメッセージの有効期限を0
から10
に変更します。しかし、有効期限を20
に設定している別のメッセージが到着した場合、その有効期限は変更されません。expiry-delay を-1
に設定した場合、この機能は無効になります。デフォルトでは、expiry-delay
は-1
に設定されます。
また、
expiry-delay
に値を指定する代わりに、expiry delay の最小値と最大値を指定することもできます。以下に例を示します。<configuration ...> <core ...> ... <address-settings> ... <address-setting match="stocks"> ... <expiry-address>ExpiryAddress</expiry-address> <min-expiry-delay>10</min-expiry-delay> <max-expiry-delay>100</max-expiry-delay> ... </address-setting> ... <address-settings> <configuration ...>
min-expiry-delay
- ブローカーがメッセージに適用される最小有効期限 (ミリ秒単位)。
max-expiry-delay
ブローカーがメッセージに適用される最大有効期限 (ミリ秒単位)。
ブローカーは、以下のように
min-expiry-delay
とmax-expiry-delay
の値を適用します。-
デフォルトの有効期限が
0
のメッセージに対して、ブローカーは有効期限を指定された値のmax-expiry-delay
に設定します。max-expiry-delay
の値を指定していない場合、ブローカーは指定されたmin-expiry-delay
の値に満了時間を設定します。min-expiry-delay
の値を指定しない場合、ブローカーはメッセージの有効期限を変更しません。 -
max-expiry-delay
の値を上回る有効期限のあるメッセージの場合、ブローカーは有効期限をmax-expiry-delay
の指定値に設定します。 -
有効期限が
min-expiry-delay
の値以下のメッセージに対して、ブローカーは有効期限を指定されたmin-expiry-delay
の値に設定します。 -
min-expiry-delay
およびmax-expiry-delay
の値の間に有効期限のあるメッセージの場合、ブローカーはメッセージの有効期限を変更しません。 -
expiry-delay
の値 (すなわちデフォルト値の-1
以外) を指定すると、min-expiry-delay
およびmax-expiry-delay
に指定する値が上書きされます。 -
min-expiry-delay
とmax-expiry-delay
の両方のデフォルト値は-1
(つまり無効) です。
-
デフォルトの有効期限が
設定ファイルの
address
要素で、以前にexpiry-address
に指定したアドレスを設定します。このアドレスにキューを定義します。以下に例を示します。<addresses> ... <address name="ExpiryAddress"> <anycast> <queue name="ExpiryQueue"/> </anycast> </address> ... </addresses>
前述の設定例では、期限切れキュー
ExpiryQueue
と期限切れアドレスExpiryAddress
を関連付けています。