activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christoph Kutzinski <ku...@gmx.de>
Subject Re: Problem with 'dispatched queue'
Date Tue, 19 Jan 2010 13:37:05 GMT

No,

sorry no simple testcase and currently don't have the time to create one.

As I can the see from the 'Prefetch 0' in the web console, prefetchSize
seems to get noticed from ActiveMQ. However, it doesn't seem to have any
effect on the dispatched queue.


I can only provide this code snippet currently on how I use the queue:


    private String getDestinationName(Pool pool) {
        return QUEUE_PREFIX + pool.getUniqueName() +
"?consumer.prefetchSize=0";
    }
    
    private List<Item> reserveItem(Pool pool, int number) throws
ServiceException {
        List<Pool> reserved = Lists.newArrayListWithExpectedSize(number);

        this.JmsTemplate.setReceiveTimeout(2000);

        String queueName = getDestinationName(pool);
        
        for (int i = 0; i < number; i++) {
            TextMessage message = (TextMessage)
this.jmsTemplate.receive(queueName);
            
            if (message == null) {
                throw ...  <== that's what happens when no messages cannot
be fetched anymore from queue
            }
            
            try {
                String idStr = message.getText();
                long itemId = Long.parseLong(idStr);

                Item item = reserveItem(itemId);
                reserved.add(item);
                
            } catch (Exception e) {
                throw ...
            }
        }
        
        return reserved;
    }

thanks
Christoph



Gary Tully wrote:
> 
> prefetch==0 should be the answer here. Do you have a simple test case you
> can share?
> 
> 2010/1/19 Christoph Kutzinski <kutzi@gmx.de>
> 
>> 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
>>
> 
> 
> 
> -- 
> http://blog.garytully.com
> 
> Open Source Integration
> http://fusesource.com
> 
> 

-- 
View this message in context: http://old.nabble.com/Problem-with-%27dispatched-queue%27-tp27223270p27225878.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message