[ 
https://issues.apache.org/activemq/browse/AMQ-2567?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=56909#action_56909
 ] 

Gary Tully commented on AMQ-2567:
---------------------------------

so the prefetchExtension is the mechanism by which a message is dispatched to a 
consumer with prefetch=0. Each receive() sends a pull if there are no messages 
which increments the prefetchExtension so another message is dispatched. With a 
prefetch of 0, you should only be able to get one message at a time.

I think a deliveredAck may be the problem, a delivered ack uses the 
prefetchextension to ensure that within a transaction it is possible to read 
past the prefetch limit. If prefetch=0, a pulling consumer, it should not do 
that. Check to see if you are getting an ack with ackType=0.

if so, either the logic with a standard ack needs to be duplicated with a 
deliveredAck or the delivery ack needs to be suppressed on the consumer. 

> Zero Prefetch not working
> -------------------------
>
>                 Key: AMQ-2567
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2567
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.0
>         Environment: Unix/Windows, Java 1.6
>            Reporter: Rudolf Janz
>         Attachments: ZeroPrefetchConsumerTest.java
>
>
> I have problems using the zero prefetch. The consumer starts prefetching 
> messages after some receives. 
>  
> Our use case is, that we have a large computation which is split into smaller 
> sub jobs. These jobs are sent via ActiveMQ to some processing nodes on 
> different machines. The duration of jobs differs very much (10s to some 
> minutes). The jobs are sent by decreasing estimated computation time. If one 
> of the consumers which receives a large job prefetches some other jobs, these 
> will be processed later. In the meantime the remaining consumers are idle, 
> and the total computation time is much longer than necessary.
>  
> I have modified the existing ZeroPrefetchConsumerTest to test for the problem 
> (I have removed the other test methods). 
>  
> Two consumers (C1  and C2) are instantiated. These messages are sent:
> 1,2,3,4,5,6,7,8,9
>  
> C1 reads 4 times, receives 1,2,3,4 -> this is correct
>  
> now C2 reads, it receives 8 not 5, which is the next message in the queue. 
> The reason is, that C1 prefetched 5, 6, 7, that should not have 
> happened.(sometimes C1 only prefetches 5,6)
>  
> The problem can be seen in the JMX Console as well, after a while, the first 
> consumer has more than one dispatched message and the queue has an 
> InflightCount of 3, although there are only two consumers!
>  
> The last version that we used was 4.1.1, that worked.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to