blob: 5931f404c375354b496daeb98dcc0e19f1fe08e2 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Last-Value Queues ยท ActiveMQ Artemis Documentation</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="ring-queues.html" />
<link rel="prev" href="scheduled-messages.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="Type to search" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="./">
<a href="./">
Introduction
</a>
</li>
<li class="chapter " data-level="1.2" data-path="notice.html">
<a href="notice.html">
Legal Notice
</a>
</li>
<li class="chapter " data-level="1.3" data-path="preface.html">
<a href="preface.html">
Preface
</a>
</li>
<li class="chapter " data-level="1.4" data-path="project-info.html">
<a href="project-info.html">
Project Info
</a>
</li>
<li class="chapter " data-level="1.5" data-path="versions.html">
<a href="versions.html">
Versions
</a>
</li>
<li class="chapter " data-level="1.6" data-path="messaging-concepts.html">
<a href="messaging-concepts.html">
Messaging Concepts
</a>
</li>
<li class="chapter " data-level="1.7" data-path="architecture.html">
<a href="architecture.html">
Architecture
</a>
</li>
<li class="chapter " data-level="1.8" data-path="using-server.html">
<a href="using-server.html">
Using the Server
</a>
</li>
<li class="chapter " data-level="1.9" data-path="upgrading.html">
<a href="upgrading.html">
Upgrading
</a>
</li>
<li class="chapter " data-level="1.10" data-path="address-model.html">
<a href="address-model.html">
Address Model
</a>
</li>
<li class="chapter " data-level="1.11" data-path="protocols-interoperability.html">
<a href="protocols-interoperability.html">
Protocols and Interoperability
</a>
</li>
<li class="chapter " data-level="1.12" data-path="amqp.html">
<a href="amqp.html">
AMQP
</a>
</li>
<li class="chapter " data-level="1.13" data-path="mqtt.html">
<a href="mqtt.html">
MQTT
</a>
</li>
<li class="chapter " data-level="1.14" data-path="stomp.html">
<a href="stomp.html">
STOMP
</a>
</li>
<li class="chapter " data-level="1.15" data-path="openwire.html">
<a href="openwire.html">
OpenWire
</a>
</li>
<li class="chapter " data-level="1.16" data-path="core.html">
<a href="core.html">
Core
</a>
</li>
<li class="chapter " data-level="1.17" data-path="jms-core-mapping.html">
<a href="jms-core-mapping.html">
Mapping JMS Concepts to the Core API
</a>
</li>
<li class="chapter " data-level="1.18" data-path="using-jms.html">
<a href="using-jms.html">
Using JMS
</a>
</li>
<li class="chapter " data-level="1.19" data-path="client-classpath.html">
<a href="client-classpath.html">
The Client Classpath
</a>
</li>
<li class="chapter " data-level="1.20" data-path="examples.html">
<a href="examples.html">
Examples
</a>
</li>
<li class="chapter " data-level="1.21" data-path="wildcard-routing.html">
<a href="wildcard-routing.html">
Routing Messages With Wild Cards
</a>
</li>
<li class="chapter " data-level="1.22" data-path="wildcard-syntax.html">
<a href="wildcard-syntax.html">
Wildcard Syntax
</a>
</li>
<li class="chapter " data-level="1.23" data-path="filter-expressions.html">
<a href="filter-expressions.html">
Filter Expressions
</a>
</li>
<li class="chapter " data-level="1.24" data-path="persistence.html">
<a href="persistence.html">
Persistence
</a>
</li>
<li class="chapter " data-level="1.25" data-path="configuring-transports.html">
<a href="configuring-transports.html">
Configuring Transports
</a>
</li>
<li class="chapter " data-level="1.26" data-path="config-reload.html">
<a href="config-reload.html">
Configuration Reload
</a>
</li>
<li class="chapter " data-level="1.27" data-path="connection-ttl.html">
<a href="connection-ttl.html">
Detecting Dead Connections
</a>
</li>
<li class="chapter " data-level="1.28" data-path="slow-consumers.html">
<a href="slow-consumers.html">
Detecting Slow Consumers
</a>
</li>
<li class="chapter " data-level="1.29" data-path="network-isolation.html">
<a href="network-isolation.html">
Avoiding Network Isolation
</a>
</li>
<li class="chapter " data-level="1.30" data-path="critical-analysis.html">
<a href="critical-analysis.html">
Detecting Broker Issues (Critical Analysis)
</a>
</li>
<li class="chapter " data-level="1.31" data-path="transaction-config.html">
<a href="transaction-config.html">
Resource Manager Configuration
</a>
</li>
<li class="chapter " data-level="1.32" data-path="flow-control.html">
<a href="flow-control.html">
Flow Control
</a>
</li>
<li class="chapter " data-level="1.33" data-path="send-guarantees.html">
<a href="send-guarantees.html">
Guarantees of sends and commits
</a>
</li>
<li class="chapter " data-level="1.34" data-path="undelivered-messages.html">
<a href="undelivered-messages.html">
Message Redelivery and Undelivered Messages
</a>
</li>
<li class="chapter " data-level="1.35" data-path="message-expiry.html">
<a href="message-expiry.html">
Message Expiry
</a>
</li>
<li class="chapter " data-level="1.36" data-path="large-messages.html">
<a href="large-messages.html">
Large Messages
</a>
</li>
<li class="chapter " data-level="1.37" data-path="paging.html">
<a href="paging.html">
Paging
</a>
</li>
<li class="chapter " data-level="1.38" data-path="scheduled-messages.html">
<a href="scheduled-messages.html">
Scheduled Messages
</a>
</li>
<li class="chapter active" data-level="1.39" data-path="last-value-queues.html">
<a href="last-value-queues.html">
Last-Value Queues
</a>
</li>
<li class="chapter " data-level="1.40" data-path="ring-queues.html">
<a href="ring-queues.html">
Ring Queues
</a>
</li>
<li class="chapter " data-level="1.41" data-path="retroactive-addresses.html">
<a href="retroactive-addresses.html">
Retroactive Addresses
</a>
</li>
<li class="chapter " data-level="1.42" data-path="exclusive-queues.html">
<a href="exclusive-queues.html">
Exclusive Queues
</a>
</li>
<li class="chapter " data-level="1.43" data-path="message-grouping.html">
<a href="message-grouping.html">
Message Grouping
</a>
</li>
<li class="chapter " data-level="1.44" data-path="consumer-priority.html">
<a href="consumer-priority.html">
Consumer Priority
</a>
</li>
<li class="chapter " data-level="1.45" data-path="pre-acknowledge.html">
<a href="pre-acknowledge.html">
Extra Acknowledge Modes
</a>
</li>
<li class="chapter " data-level="1.46" data-path="management.html">
<a href="management.html">
Management
</a>
</li>
<li class="chapter " data-level="1.47" data-path="management-console.html">
<a href="management-console.html">
Management Console
</a>
</li>
<li class="chapter " data-level="1.48" data-path="metrics.html">
<a href="metrics.html">
Metrics
</a>
</li>
<li class="chapter " data-level="1.49" data-path="security.html">
<a href="security.html">
Security
</a>
</li>
<li class="chapter " data-level="1.50" data-path="masking-passwords.html">
<a href="masking-passwords.html">
Masking Passwords
</a>
</li>
<li class="chapter " data-level="1.51" data-path="broker-plugins.html">
<a href="broker-plugins.html">
Broker Plugins
</a>
</li>
<li class="chapter " data-level="1.52" data-path="resource-limits.html">
<a href="resource-limits.html">
Resource Limits
</a>
</li>
<li class="chapter " data-level="1.53" data-path="jms-bridge.html">
<a href="jms-bridge.html">
The JMS Bridge
</a>
</li>
<li class="chapter " data-level="1.54" data-path="client-reconnection.html">
<a href="client-reconnection.html">
Client Reconnection and Session Reattachment
</a>
</li>
<li class="chapter " data-level="1.55" data-path="diverts.html">
<a href="diverts.html">
Diverting and Splitting Message Flows
</a>
</li>
<li class="chapter " data-level="1.56" data-path="core-bridges.html">
<a href="core-bridges.html">
Core Bridges
</a>
</li>
<li class="chapter " data-level="1.57" data-path="transformers.html">
<a href="transformers.html">
Transformers
</a>
</li>
<li class="chapter " data-level="1.58" data-path="duplicate-detection.html">
<a href="duplicate-detection.html">
Duplicate Message Detection
</a>
</li>
<li class="chapter " data-level="1.59" data-path="clusters.html">
<a href="clusters.html">
Clusters
</a>
</li>
<li class="chapter " data-level="1.60" data-path="federation.html">
<a href="federation.html">
Federation
</a>
<ul class="articles">
<li class="chapter " data-level="1.60.1" data-path="federation-address.html">
<a href="federation-address.html">
Address Federation
</a>
</li>
<li class="chapter " data-level="1.60.2" data-path="federation-queue.html">
<a href="federation-queue.html">
Queue Federation
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.61" data-path="ha.html">
<a href="ha.html">
High Availability and Failover
</a>
</li>
<li class="chapter " data-level="1.62" data-path="graceful-shutdown.html">
<a href="graceful-shutdown.html">
Graceful Server Shutdown
</a>
</li>
<li class="chapter " data-level="1.63" data-path="libaio.html">
<a href="libaio.html">
Libaio Native Libraries
</a>
</li>
<li class="chapter " data-level="1.64" data-path="thread-pooling.html">
<a href="thread-pooling.html">
Thread management
</a>
</li>
<li class="chapter " data-level="1.65" data-path="web-server.html">
<a href="web-server.html">
Embedded Web Server
</a>
</li>
<li class="chapter " data-level="1.66" data-path="logging.html">
<a href="logging.html">
Logging
</a>
</li>
<li class="chapter " data-level="1.67" data-path="rest.html">
<a href="rest.html">
REST Interface
</a>
</li>
<li class="chapter " data-level="1.68" data-path="embedding-activemq.html">
<a href="embedding-activemq.html">
Embedding the Broker
</a>
</li>
<li class="chapter " data-level="1.69" data-path="karaf.html">
<a href="karaf.html">
Apache Karaf
</a>
</li>
<li class="chapter " data-level="1.70" data-path="tomcat.html">
<a href="tomcat.html">
Apache Tomcat
</a>
</li>
<li class="chapter " data-level="1.71" data-path="spring-integration.html">
<a href="spring-integration.html">
Spring Integration
</a>
</li>
<li class="chapter " data-level="1.72" data-path="cdi-integration.html">
<a href="cdi-integration.html">
CDI Integration
</a>
</li>
<li class="chapter " data-level="1.73" data-path="intercepting-operations.html">
<a href="intercepting-operations.html">
Intercepting Operations
</a>
</li>
<li class="chapter " data-level="1.74" data-path="data-tools.html">
<a href="data-tools.html">
Data Tools
</a>
</li>
<li class="chapter " data-level="1.75" data-path="maven-plugin.html">
<a href="maven-plugin.html">
Maven Plugin
</a>
</li>
<li class="chapter " data-level="1.76" data-path="unit-testing.html">
<a href="unit-testing.html">
Unit Testing
</a>
</li>
<li class="chapter " data-level="1.77" data-path="perf-tuning.html">
<a href="perf-tuning.html">
Troubleshooting and Performance Tuning
</a>
</li>
<li class="chapter " data-level="1.78" data-path="configuration-index.html">
<a href="configuration-index.html">
Configuration Reference
</a>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
Published with GitBook
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >Last-Value Queues</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="last-value-queues">Last-Value Queues</h1>
<p>Last-Value queues are special queues which discard any messages when a
newer message with the same value for a well-defined Last-Value property
is put in the queue. In other words, a Last-Value queue only retains the
last value.</p>
<p>A typical example for Last-Value queue is for stock prices, where you
are only interested by the latest value for a particular stock.</p>
<p>Messages sent to an Last-Value queue without the specified property will be delivered as normal and will never be &quot;replaced&quot;.</p>
<h2 id="configuration">Configuration</h2>
<h4 id="last-value-key-configuration">Last Value Key Configuration</h4>
<p>Last-Value queues can be statically configured in broker.xml via the <code>last-value-key</code></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">address</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;foo.bar&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">queue</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;orders1&quot;</span> <span class="hljs-attr">last-value-key</span>=<span class="hljs-string">&quot;reuters_code&quot;</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">address</span>&gt;</span>
</code></pre>
<p>Specified on creating a queue by using the CORE api specifying the parameter
<code>lastValue</code> to <code>true</code>. </p>
<p>Or on auto-create when using the JMS Client by using address parameters when
creating the destination used by the consumer.</p>
<pre><code class="lang-java">Queue queue = session.createQueue(<span class="hljs-string">&quot;my.destination.name?last-value-key=reuters_code&quot;</span>);
Topic topic = session.createTopic(<span class="hljs-string">&quot;my.destination.name?last-value-key=reuters_code&quot;</span>);
</code></pre>
<p>Address wildcards can be used to configure Last-Value queues
for a set of addresses (see <a href="wildcard-syntax.html">here</a>).</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">address-setting</span> <span class="hljs-attr">match</span>=<span class="hljs-string">&quot;lastValueQueue&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">default-last-value-key</span>&gt;</span>reuters_code<span class="hljs-tag">&lt;/<span class="hljs-name">default-last-value-key</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">address-setting</span>&gt;</span>
</code></pre>
<p>By default, <code>default-last-value-key</code> is null.</p>
<h4 id="legacy-last-value-configuration">Legacy Last Value Configuration</h4>
<p>Last-Value queues can also just be configured via the <code>last-value</code> boolean property, doing so it will default the last-value-key to <code>&quot;_AMQ_LVQ_NAME&quot;</code>.</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">address</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;foo.bar&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">queue</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;orders1&quot;</span> <span class="hljs-attr">last-value</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">address</span>&gt;</span>
</code></pre>
<p>Specified on creating a queue by using the CORE api specifying the parameter
<code>lastValue</code> to <code>true</code>. </p>
<p>Or on auto-create when using the JMS Client by using address parameters when
creating the destination used by the consumer.</p>
<pre><code class="lang-java">Queue queue = session.createQueue(<span class="hljs-string">&quot;my.destination.name?last-value=true&quot;</span>);
Topic topic = session.createTopic(<span class="hljs-string">&quot;my.destination.name?last-value=true&quot;</span>);
</code></pre>
<p>Also the default for all queues under and address can be defaulted using the
<code>address-setting</code> configuration:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">address-setting</span> <span class="hljs-attr">match</span>=<span class="hljs-string">&quot;lastValueQueue&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">default-last-value-queue</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">default-last-value-queue</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">address-setting</span>&gt;</span>
</code></pre>
<p>By default, <code>default-last-value-queue</code> is false. </p>
<p>Note that <code>address-setting</code> <code>last-value-queue</code> config is deprecated, please use
<code>default-last-value-queue</code> instead.</p>
<h2 id="last-value-property">Last-Value Property</h2>
<p>The property name used to identify the last value is configurable
at the queue level mentioned above.</p>
<p>If using the legacy setting to configure an LVQ then the default property <code>&quot;_AMQ_LVQ_NAME&quot;</code> is used
(or the constant <code>Message.HDR_LAST_VALUE_NAME</code> from the Core API).</p>
<p>For example, using the sample configuration </p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">address</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;foo.bar&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">queue</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;orders1&quot;</span> <span class="hljs-attr">last-value-key</span>=<span class="hljs-string">&quot;reuters_code&quot;</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">address</span>&gt;</span>
</code></pre>
<p>if two messages with the same value for the Last-Value
property are sent to a Last-Value queue, only the latest message will be
kept in the queue:</p>
<pre><code class="lang-java"><span class="hljs-comment">// send 1st message with Last-Value property `reuters_code` set to `VOD`</span>
TextMessage message = session.createTextMessage(<span class="hljs-string">&quot;1st message with Last-Value property set&quot;</span>);
message.setStringProperty(<span class="hljs-string">&quot;reuters_code&quot;</span>, <span class="hljs-string">&quot;VOD&quot;</span>);
producer.send(message);
<span class="hljs-comment">// send 2nd message with Last-Value property `reuters_code` set to `VOD`</span>
message = session.createTextMessage(<span class="hljs-string">&quot;2nd message with Last-Value property set&quot;</span>);
message.setStringProperty(<span class="hljs-string">&quot;reuters_code&quot;</span>, <span class="hljs-string">&quot;VOD&quot;</span>);
producer.send(message);
...
<span class="hljs-comment">// only the 2nd message will be received: it is the latest with</span>
<span class="hljs-comment">// the Last-Value property set</span>
TextMessage messageReceived = (TextMessage)messageConsumer.receive(<span class="hljs-number">5000</span>);
System.out.format(<span class="hljs-string">&quot;Received message: %s\n&quot;</span>, messageReceived.getText());
</code></pre>
<h2 id="forcing-all-consumers-to-be-non-destructive">Forcing all consumers to be non-destructive</h2>
<p>When a consumer attaches to a queue, the normal behaviour is that messages are sent to that consumer are acquired exclusively by that consumer, and when the consumer acknowledges them, the messages are removed from the queue.</p>
<p>Another common pattern is to have queue &quot;browsers&quot; which send all messages to the browser, but do not prevent other consumers from receiving the messages, and do not remove them from the queue when the browser is done with them. Such a browser is an instance of a &quot;non-destructive&quot; consumer.</p>
<p>If every consumer on a queue is non destructive then we can obtain some interesting behaviours. In the case of a LVQ then the queue will always contain the most up to date value for every key. </p>
<p>A queue can be created to enforce all consumers are non-destructive for last value queue. This can be be achieved using the following queue configuration:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">address</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;foo.bar&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">queue</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;orders1&quot;</span> <span class="hljs-attr">last-value-key</span>=<span class="hljs-string">&quot;reuters_code&quot;</span> <span class="hljs-attr">non-destructive</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">multicast</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">address</span>&gt;</span>
</code></pre>
<p>Or on auto-create when using the JMS Client by using address parameters when
creating the destination used by the consumer.</p>
<pre><code class="lang-java">Queue queue = session.createQueue(<span class="hljs-string">&quot;my.destination.name?last-value-key=reuters_code&amp;non-destructive=true&quot;</span>);
Topic topic = session.createTopic(<span class="hljs-string">&quot;my.destination.name?last-value-key=reuters_code&amp;non-destructive=true&quot;</span>);
</code></pre>
<p>Also the default for all queues under and address can be defaulted using the
<code>address-setting</code> configuration:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">address-setting</span> <span class="hljs-attr">match</span>=<span class="hljs-string">&quot;lastValueQueue&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">default-last-value-key</span>&gt;</span>reuters_code<span class="hljs-tag">&lt;/<span class="hljs-name">default-last-value-key</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">default-non-destructive</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">default-non-destructive</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">address-setting</span>&gt;</span>
</code></pre>
<p>By default, <code>default-non-destructive</code> is false.</p>
<h4 id="bounding-size-using-expiry-delay">Bounding size using expiry-delay</h4>
<p>For queues other than LVQs, having only non-destructive consumers could mean that messages would never get deleted, leaving the queue to grow unconstrainedly. To prevent this you can use the ability to set a default <code>expiry-delay</code>.</p>
<p>See <a href="message-expiry.html#configuring-expiry-delay">expiry-delay</a> for more details on this.</p>
<h2 id="example">Example</h2>
<p>See the <a href="examples.html#last-value-queue">last-value queue example</a> which shows
how last value queues are configured and used with JMS.</p>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="scheduled-messages.html" class="navigation navigation-prev " aria-label="Previous page: Scheduled Messages">
<i class="fa fa-angle-left"></i>
</a>
<a href="ring-queues.html" class="navigation navigation-next " aria-label="Next page: Ring Queues">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"Last-Value Queues","level":"1.39","depth":1,"next":{"title":"Ring Queues","level":"1.40","depth":1,"path":"ring-queues.md","ref":"ring-queues.md","articles":[]},"previous":{"title":"Scheduled Messages","level":"1.38","depth":1,"path":"scheduled-messages.md","ref":"scheduled-messages.md","articles":[]},"dir":"ltr"},"config":{"plugins":[],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"github":"apache/activemq-artemis","theme":"default","githubHost":"https://github.com/","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"ActiveMQ Artemis Documentation","links":{"home":"http://activemq.apache.org/artemis","issues":"https://issues.apache.org/jira/browse/ARTEMIS","contribute":"http://activemq.apache.org/contributing.html"},"gitbook":"3.x.x","description":"ActiveMQ Artemis User Guide and Reference Documentation"},"file":{"path":"last-value-queues.md","mtime":"2020-01-10T14:13:27.000Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2020-01-10T14:51:01.535Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="gitbook/gitbook-plugin-search/search.js"></script>
<script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>