your important message is in the store, but not in the current memory
snapshot.
Unless we keep all messages in memory (vmcursor), we need to carefully
configure the store cursors use of memory.

There are two problems here.

The first is caching messages on send by the store cursor.
If there is a large batch of low priority messages that cause the cache to
be exhausted, followed by some high priority messages, the high priority
messages will only be read and dispatched when the cache is depleted.
Currently it is not possible for a cached low priority message in memory to
be replaced by a high priority message.
The workaround for this is to disable the cursor cache.
<policyEntry queue="xxx" useCache="false" ..>

The second is paging into memory from the store, to ensure true priority
order this must occur only for dispatch to consumers. By default there is a
periodic message scan to check for priority. This must be disabled,
otherwise a consumer will get a view of the store order as seen by the last
scan rather than at the time it subscribes.

The workaround for this is to disable async expiry processing:
<policyEntry queue="xxx" useCache="false" expireMessagesPeriod="0" >

Lastly, if high priory messages are a must have for each consumer, using
prefetch=1 is necessary, such that every consumer dispatch goes to the
store to find the current highest priority message. Otherwise a batch of
priority ordered messages will be in memory ready to dispatch, irrespective
of new deliveries.

<policyEntry queue="xxx" useCache="false" expireMessagesPeriod="0"
queuePrefetch="1" >

It is a trade off between taking a snapshot and caching or getting the
latest up-to-date information w.r.t to producers.

For active durable topic subscribers we support immediate priority
dispatch, where we bypass the cache if we have a higher priority message
and dispatch it immediately to all subscribers.
We may need to investigate a similar arrangement for queues.


On 7 January 2013 07:40, xawiers <xawi...@gmail.com> wrote:

> According to SuoNayi, amq will respect the message priority order if
> vmcursor
> is used.
> If I will use default cursor - I will not get message priority. And this is
> bad. Message priority is very important to me.
> I have tried with storage cursor also:
> One producer, one consumer
>
> added 10 messages with priority 3
> added 3 messages with priority 5
> added 100000 messages with priority 3
> added 3 messages with priority 5
>
> consumed 3 messages (all priority 5), consuming 4th message I got message
> with priority 3. Where is my important message ?
>
>
>
> --
> View this message in context:
> http://activemq.2283324.n4.nabble.com/Message-priority-tp4040260p4661442.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>



-- 
http://redhat.com
http://blog.garytully.com

Reply via email to