activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nico <nico.roga...@gmail.com>
Subject Real Priority Message Consuming in ActiveMQ
Date Fri, 04 May 2012 10:02:07 GMT
Hi there,
we are using activeMQ 5.5.2 as message broker for means of job distribution
across systems and as safeguard against failures.

Now a new reqiurement rouse in the means of consuming messages in order of
their priority, so that important jobs are processed before unimportant
ones.

Looking into the documentation and the all so often recited faq about "How
can I support priority queues?" it seems quite easy to just activate
priority message consuming with the boolean prioritizedMessages and a little
configuration on the publisher side to include priorities in your jms
messages.
But it doesn't work. Not as I would expect real priority message consuming
expect to be working, by always pulling the highest prioritized message out
of the queue. And looking into several blog entries and jira bugs it evens
shows that it's not even supposed to work. Maybe on a entry buffer level of
messages being ordered when they enter the queue simultaneously, but not
when they are persistet in the queue.

So then I looked into the also stated "Alternatives" for priority message
consuming.
The Selector Approach doesn't suite our needs, cause we only have a little
number of consumers, that all have to process high and low priority jobs.
The Resequencer Approach sounded promising too, until I realized that it is
not intended to resequence messages within a queue, but just in the
transition from one queue to another. I implemented the 2 queues with
producer and consumer being connected by a BatchResequencer approach, but
that doesn't work very well.
The problem is this: say there are a 100 low priority messages and 1 high
priority message coming in in the first minute, the resequencer takes those
and writes them in the consumer queue with the high priority message being
first. Fine. But then in the seconde minute 50 more high priority messages
enter the producer queue. The Resequencer takes those messages and puts them
behind the low priorized messages in the consumer queue. So no more
priorization. One can of course play around with the timeouts and batch
sizes, but you will never reach "real priority message consuming" where a
higher priorized message is always consumed before a lower priorized
message.

So I have two issues I would like to discuss:
1. Does activeMQ support real prioritized message consuming, where a high
priority message is always consumed before a low prio message, even if they
entered the queue minutes apart?
2. If it doesn't, why does the faq "How can I support priority queues?"
state that it does? I didn't see one Remark on there like "Oh and if you
mean 'high prio before low prio always' with message priority, then sorry no
we don't support that".

btw: I know the JMS specification doesn't require priority messaging order,
or any order, but as I looked into hornetQ for example, they have a perfect
implementation of real message priority consuming. So it should be possible.

Hope this wasn't too long for anyone to answer ;o)
Thanks in advance!

Nico



--
View this message in context: http://activemq.2283324.n4.nabble.com/Real-Priority-Message-Consuming-in-ActiveMQ-tp4608262.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Mime
View raw message