6.3. last-value Queues


最后值队列是特殊队列,当将值相同的新消息放入队列中时,丢弃任何消息。换句话说,最后一个值队列仅保留最后一个值。最后值队列的典型应用可能涉及股票价格,您仅对特定股票的最新价格感兴趣。

重要

如果队列启用了分页,则最后值队列将无法正常工作。务必在使用最后值队列之前禁用分页

配置 Last-value Queues

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 的可接受的值为 truefalse。使用管理 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);
  • 然后,它会使用相同的最后值向队列发送另一条消息
message = session.createTextMessage("My 2nd message with the last-value property set");
message.setStringProperty("_AMQ_LVQ_NAME", "MY_MESSAGE");
producer.send(message);
  • 接下来,消费者收到带有最后值的消息
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000);
System.out.format("Received message: %s\n", messageReceived.getText());

在上例中,客户端的输出将是 "My 2nd 消息,并设置了 last-value 属性",因为两条消息都 设置为 "MY_MESSAGE",在队列中在第一个消息后收到第二条消息。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部