can you open an issue for this, I just gave it a whirl (on trunk) and get similar but non deterministic results. The second consumer got 6 and 7 on two runs. PrefetchSubscription and prefetchExtension on a deliveryAck in a transaction are areas that you need to look into to resolve this. Great that you have a simple junit test case.
2010/1/14 Rudolf Janz <[email protected]> > Hello, > > I have problems using a prefetch of Zero. 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! > > I have tried debugging in the ActiveMQConsumer code, but did not get far. > If somebody can give me a pointer where to look, I might give it another > try. > > Regards > Rudolf Janz > > > > -- http://blog.garytully.com Open Source Integration http://fusesource.com
