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-settinglast-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" になります。