Note that to implement the JMS API - the minimum value of prefetch
possible is 1 which means deliver 1 message then wait until an
acknowledgement before delivering another. This is essential to
implement

consumer.setMessageListener()
consumer.receiveNoWait().

Neither of which are possible to implement with a prefetch of zero
which effectively means you cannot dispatch messages to the consumers
at all - they must pull them on demand.

We could implement the method consumer.receive() to block and
explicitly perform a request-response to the broker pulling a message.
With a bit more thought we might figure out a way of implementing
receive(timeout) where if a message is delivered by the broker after
the timeout we give it back to the broker.

Though i"m with Hiram on this one - I don't think a prefetch of zero
is really needed. Also note that receive() wouldn't solve your use
case since it would deliver you a message on the requested queue
anyway. What you really want is 'receive a message if you can on queue
1, then if not on queue2 then if not on queue 3' which is quite
different to a prefetch of zeron.

You'd be better creating a single consumer which consumes to all 3
queues using a wildard or composite destination or even just a single
queue. Then you might want to create your own DispatchPolicy to decide
which messages get dispatched to which consumers - or write some
reordering logic in a Broker Interceptor to make sure that any 'big
jobs' are reordered to be ahead of any 'small jobs' by waiting a small
amount of time to see if you can reorder things.

i.e. what you really want to do is just reorder messages on a queue
based on their priority. Even if we had a prefetch of zero I don't
think it'll help you much.


On 8/8/06, Pesochinskiy, Vadim (MSCIBARRA)
<[EMAIL PROTECTED]> wrote:
Hi!

I am trying to figure out how this can be done.

As I understand messages are forwarded by the queue to every consumer
(PrefetchSubscription). As long as number of messages dispatched does
not exceed the prefetchSize, messages are send to the client. As soon as
messages are acked more messages are dispatched to the client.

When I set prefetchSize=0 no messages are ever delivered. In this case
instead of pushing messages from the server, they will have to be
requested by the client every time receive() or receiveNoWait() is
called. Are you OK with this impelementation?

BTW, are you guys convinced that AMQ-855 is an issue that needs to be
resolved? To remind you, I need multiple consumers to implement our
prioriteis requirements. In some cases consumers maybe be idle for a
long time and as a result they hold real-time messages, which otherwise
could to be processed by other consumers.

https://issues.apache.org/activemq/browse/AMQ-855

http://www.nabble.com/forum/ViewPost.jtp?post=5583273&framed=y
--------------------------------------------------------

NOTICE: If received in error, please destroy and notify sender. Sender does not 
intend to waive confidentiality or privilege. Use of this email is prohibited 
when received in error.



--

James
-------
http://radio.weblogs.com/0112098/

Reply via email to