4.11. 最後の値キューの設定
last value queueとは、同じラストバリューキーの値を持つ新しいメッセージがキューに入ると、キュー内のメッセージを破棄するタイプのキューです。この動作により、最後の値キューは同じキーの最後の値のみを保持します。
キューに送信されたメッセージがページングされている場合、最終値キューは期待どおりに動作しません。これらのキューに送信されたメッセージがページングされないように、last-value キューを持つアドレスの address-full-policy
パラメーターの値を DROP
、BLOCK
、または FAIL
に設定します。詳細は、「メッセージドロップの設定」 を参照してください。
last value キューに対する単純なユースケースは、株式の株価しか監視するためのものです。特定の株式の最新値のみが関心があります。
設定した最後の値キーのないメッセージが最後の値キューに送信される場合、ブローカーはこのメッセージを "通常" のメッセージとして処理します。設定された最後の値キーを持つ新しいメッセージが到達すると、このようなメッセージはキューから消去されません。
最後の値キューを個別に、またはアドレスセットに関連付けられたすべてのキューに設定できます。
以下の手順では、以下の方法で最後の値キューを設定する方法を説明します。
4.11.1. 最後の値キューを個別に設定
以下の手順は、最後の値キューを個別に設定する方法を説明します。
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 指定のキューに、
last-value-key
キーを追加し、カスタム値を指定します。以下に例を示します。<address name="my.address"> <multicast> <queue name="prices1" last-value-key="stock_ticker"/> </multicast> </address>
また、デフォルトのラストバリューキー名
_AMQ_LVQ_NAME
を使用するラストバリューキューを設定することもできます。これを行うには、与えられたキューにlast-value
のキーを追加します。この値はtrue
に設定します。以下に例を示します。<address name="my.address"> <multicast> <queue name="prices1" last-value="true"/> </multicast> </address>
4.11.2. アドレスの最後の値キューの設定
次の手順では、アドレスまたは一連のアドレスにラストバリューキューを設定します。
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 address-setting
要素に一致するアドレスの場合は、default-last-value-key
を追加します。カスタム値を指定します。以下に例を示します。<address-setting match="lastValue"> <default-last-value-key>stock_ticker</default-last-value-key> </address-setting>
上記の設定に基づいて、
lastValue
アドレスに関連付けられたすべてのキューは、stock_ticker
の最後の値キーを使用します。デフォルトでは、default -last-value-key
の値は設定されていません。一連のアドレスに対してラストバリューキューを設定するには、アドレスのワイルドカードを指定することができます。以下に例を示します。
<address-setting match="lastValue.*"> <default-last-value-key>stock_ticker</default-last-value-key> </address-setting>
または、アドレスに関連付けられたすべてのキューや一連のアドレスを設定して、デフォルトの最後の値キー名である
_AMQ_LVQ_NAME
を使用することができます。これを行うには、default-last-value-key
の代わりにdefault-last-value-queue
を追加します。この値はtrue
に設定します。以下に例を示します。<address-setting match="lastValue"> <default-last-value-queue>true</default-last-value-queue> </address-setting>
関連情報
- アドレスの設定時に使用できるワイルドカード構文についての詳細は、「アドレスセットへのアドレス設定の適用」 を参照してください。
4.11.3. 最後の値のキュー動作の例
この例では、最後の値キューの動作を示しています。
broker.xml
設定ファイルで、以下のような設定が追加されているとします。
<address name="my.address"> <multicast> <queue name="prices1" last-value-key="stock_ticker"/> </multicast> </address>
上記の設定では、prices1
というキューを作成し、最終値のキーを stock_ticker
としています。
ここで、クライアントが 2 つのメッセージを送信するとします。各メッセージには、プロパティー stock_ticker
に同じ値 ATN
があります。各メッセージには stock_ price
というプロパティーに異なる値があります。各メッセージは、同じキュー prices1
に送信されます。
TextMessage message = session.createTextMessage("First message with last value property set"); message.setStringProperty("stock_ticker", "ATN"); message.setStringProperty("stock_price", "36.83"); producer.send(message);
TextMessage message = session.createTextMessage("Second message with last value property set"); message.setStringProperty("stock_ticker", "ATN"); message.setStringProperty("stock_price", "37.02"); producer.send(message);
stock_ticker
last value キーと同じ値を持つ 2 つのメッセージ (この場合は ATN
) が prices1 queue
に到達すると、最新のメッセージのみがキュー内に残り、最初のメッセージがパージされます。コマンドラインで以下の行を入力し、この動作を検証できます。
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000); System.out.format("Received message: %s\n", messageReceived.getText());
この例では、両方のメッセージが最後の値キーに同じ値を使用し、2 番目のメッセージがキューに受信されたため、2 つ目のメッセージが表示されます。
4.11.4. 最後の値キューに対して非破壊的な消費を強制する
コンシューマーがキューに接続すると、通常の動作として、そのコンシューマーに送信されたメッセージがコンシューマーによってのみ取得されます。コンシューマーがメッセージの受信を確認すると、ブローカーはキューからメッセージを削除します。
通常の消費動作の代わりに、非破壊的な消費を強制するようにキューを設定できます。この場合、キューがメッセージをコンシューマーに送信すると、他のコンシューマーによってメッセージを受信できます。さらに、コンシューマーが消費した場合でも、メッセージはキューに残ります。このような非破壊的な消費行動を強制する場合、コンシューマーはキューブラウザーと呼ばれます。
非破壊的な消費を実施すると、キューが特定の最後の値キーに関する最新値を保持するようにするため、最後の値キューでは便利な設定になります。
以下の手順は、最後の値キューに対して非破壊的な消費を強制する方法を示しています。
前提条件
すでに個別に、あるいは、アドレスや一連のアドレスに関連するすべてのキューに対して、最後の値のキューを設定しました。詳細は以下を参照してください。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 キューを最後の値キューとして個別に設定している場合は、
non-destructive
キーを追加します。この値はtrue
に設定します。以下に例を示します。<address name="my.address"> <multicast> <queue name="orders1" last-value-key="stock_ticker" non-destructive="true" /> </multicast> </address>
以前、最後の値キューにアドレスまたは一連のアドレス を設定している場合は、
default-non-destructive
キーを追加します。この値はtrue
に設定します。以下に例を示します。<address-setting match="lastValue"> <default-last-value-key>stock_ticker </default-last-value-key> <default-non-destructive>true</default-non-destructive> </address-setting>
注記デフォルトでは、
default-non-destructive
の値はfalse
です。