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" />
<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
}
/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)
/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);
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);
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());
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" になります。