Hi,

let me first describe my use-case as it is probably a little bit different from 
the usual JMS use case:

We have a single process which fills a JMS queue from a pool of available items 
(say we have 50 items total).
The we have n consumers (lets say 2) which read the items from the queue in a 
synchronous way (i.e. Spring JmsTemplate#receive).
This goes like so:
- consumer A fetches 5 items
- consumer B fetches 20 items
- consumer A fetches 5 items
and so on.

The problem we have now is that we are not able to fetch all items from the 
queue - e.g. if there are still 10 items left in the queue and I want to get 
10, I only get 5 or so.

I've already found the prefetchSize configuration and set it to 0 (also tried 
1), but still the same problem.
The problem seems to be that each consumer has an internal 'dispatched queue' 
which already has some entries and consumer A has no possibility to access the 
dispatched queue of consumer B.

For example the web console looks like this:
Consumer A; Enqueues 10; Dequeues 5; Dispatched 10; Dispatched Queue 5; 
Prefetch 0; Max Pending 0

Consumer B; Enqueues 20; Dequeues 10; Dispatched 20; Dispatched Queue 10; 
Prefetch 0; Max Pending 0

In this case there would be e.g. still 15 items total in the queue, but with 
consumer A I would onyl be able to get 5 items and with consumer B only 10 
items.

I've tried various configuration options which I found in the ActiveMQ docu 
(dispatchAsync, alwaysSessionAsync, sendAsync, ...), but none seemed to help.

Can anyone help? Does anyone know how to configure/disable this dispatched 
queue?


thanks
Christoph

Reply via email to