6.3. last-value キュー
last-value キューは、明確に定義された last-value プロパティーと同じ値のメッセージが新たにキューに入れられると、メッセージをすべて破棄する特別なキューです。つまり、last-value キューは最後の値のみを保持します。last-value キューの代表的な応用例には、特定の株式の最終株価のみに関心がある場合の株価があります。
キューのページングが有効になっていると、last-value キューは期待通りに動作しません。last-value キューを使用する前に、ページングを無効 にしてください。
last-value キューの設定
last-value キューは、address-setting
設定要素内に定義されます。
<address-setting name="jms.queue.lastValueQueue" last-value-queue="true" />
管理 CLI を使用して、特定の address-setting
の last-value-queue
の値を読み取ります。
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#:read-attribute(name=last-value-queue) { "outcome" => "success", "result" => false }
last-value-queue
に許可される値は true
または false
です。管理 CLI を使用して、次のようにいずれかの値を設定します。
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#:write-attribute(name=last-value-queue,value=true) /subsystem=messaging-activemq/server=default/address-setting=news.asia.#:write-attribute(name=last-value-queue,value=false)
last-value プロパティーの使用
最終値の特定に使用されるプロパティー名は _AMQ_LVQ_NAME
(またはコア API の定数 Message.HDR_LAST_VALUE_NAME
) です。以下の Java コードで last-value プロパティーの使用方法を示します。
- まず、パブリッシャーが最終値キューにメッセージを送信します。
TextMessage message = session.createTextMessage("My 1st message with the last-value property set"); message.setStringProperty("_AMQ_LVQ_NAME", "MY_MESSAGE"); producer.send(message);
- 次に、同じ last-value を使用して別のメッセージをキューに送信します。
message = session.createTextMessage("My 2nd message with the last-value property set"); message.setStringProperty("_AMQ_LVQ_NAME", "MY_MESSAGE"); producer.send(message);
- 次に、コンシューマーが last-value を持つメッセージを受け取ります。
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000); System.out.format("Received message: %s\n", messageReceived.getText());
上記の例では、両方のメッセージが _AMQ_LVQ_NAME
を "MY_MESSAGE"
に設定しており、最初のメッセージの後に 2 番目のメッセージがキューで受信されたため、クライアントの出力は "My 2nd message with the last-value property set"
になります。