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> ...<configuration ...> <core ...> ... <message-expiry-scan-period>1000</message-expiry-scan-period> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前述の設定に基づいて、ブローカーは 1000 ミリ秒ごとに期限切れのメッセージのキューをスキャンします。
一致するアドレスまたは一連のアドレスの
address-setting要素で、有効期限切れのアドレスを指定します。また、メッセージの有効期限を設定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 の最小値と最大値を指定することもできます。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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に指定したアドレスを設定します。このアドレスにキューを定義します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前述の設定例では、期限切れキュー
ExpiryQueueと期限切れアドレスExpiryAddressを関連付けています。
4.12.2. 期限切れリソースの自動作成 リンクのコピーリンクがクリップボードにコピーされました!
一般的なユースケースとして、期限切れのメッセージを元のアドレスに従って分離することです。例えば、stocks というアドレスからの期限切れメッセージを EXP.stocks という期限切れキューにルーティングすることを選択したとします。同様に、orders というアドレスからの期限切れメッセージを EXP.orders という期限切れキューにルーティングする場合もあるでしょう。
このタイプのルーティングパターンにより、期限切れのメッセージを簡単に追跡、検査、および管理できるようになります。ただし、このようなパターンは、主に自動作成されたアドレスおよびキューを使用する環境に実装するのが困難です。このような環境では、管理者は、期限切れのメッセージを保持するためにアドレスおよびキューを手動で作成するために必要な追加の作業を必要としません。
解決策として、特定のアドレスまたは一連のアドレス の期限切れのメッセージを処理するように、リソース (すなわちアドレスとキュー) を自動的に作成するようにブローカーを設定できます。以下の手順はその一例です。
前提条件
- 指定したアドレスまたは一連のアドレスに対して、すでに有効期限付きのアドレスを設定しています。詳細は、「メッセージの有効期限の設定」 を参照してください。
手順
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 以前、設定ファイルに追加した
<address-setting>要素を探して、一致するアドレスまたは一連のアドレスの有効期限を定義します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow <address-setting>要素に、期限切れリソース (すなわちアドレスやキュー) を自動的に作成することや、これらのリソースにどのような名前を付けるかをブローカに指示する設定項目を追加します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow auto-create-expiry-resources期限切れのメッセージを受信するため、ブローカーが期限切れアドレスとキューを自動的に作成するかどうかを指定します。デフォルト値は
falseです。パラメーターの値が
trueに設定されている場合、ブローカーは期限切れアドレスと関連付けられた期限切れキューを定義する<address>要素を自動的に作成します。自動的に作成された<address>要素の名前の値は、<expiry-address>に指定された名前の値と一致します。自動作成された期限切れキューには、
multicastルーティングタイプがあります。デフォルトでは、ブローカは失効したメッセージが最初に送信されたアドレス (例えば、stocks) と一致するように失効キューに名前を付けています。ブローカーは、
_AMQ_ORIG_ADDRESSプロパティーを使用する期限切れキューのフィルターも定義します。このフィルターは、期限切れキューが対応する元のアドレスに送信されるメッセージのみを受け取るようになります。expiry-queue-prefixブローカーにより、自動作成された期限切れキューの名前に適用される接頭辞。デフォルト値は
EXPです。接頭辞の値を定義した場合、またはデフォルト値を維持した場合、期限切れキューの名前は、接頭辞と元のアドレスを連結したものになります (例:
EXP.stocks)。expiry-queue-suffix- ブローカーが自動作成された期限切れキューの名前に適用される接尾辞。デフォルト値は定義されていません (つまり、ブローカーは接尾辞を適用しません)。
キュー名自体を使用して (AMQ Broker Core Protocol JMS クライアントを使用する場合など)、または完全修飾キュー名 (別の JMS クライアントを使用する場合など) を使用して、期限切れキューに直接アクセスできます。
期限切れアドレスとキューは自動的に作成され、自動作成されたアドレスやキューの削除に関連するアドレス設定もこれらの期限切れリソースに適用されます。
関連情報
- 自動作成されたアドレスやキューの自動削除を設定するためのアドレス設定については、「アドレスおよびキューの自動作成および削除の設定」 を参照してください。