Using:
- ServiceMix 4.3.5
- ActiveMQ 5.7.0
- Camel 2.10.7
I have a persistent queue in ActiveMQ, which I consume messages from
using activemq-component with concurrentConsumers=20 set.
ActiveMQ connections are pooled:
<bean id="activemqConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory"
depends-on="broker">
<property name="brokerURL"
value="vm://${activemq.brokername}?create=false&waitForStart=10000"
/>
<property name="userName" value="${activemq.user}"/>
<property name="password" value="${activemq.password}"/>
</bean>
<bean id="pooledConnectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="idleTimeout" value="0" />
<property name="maxConnections" value="8" />
<property name="connectionFactory" ref="activemqConnectionFactory" />
</bean>
<bean id="resourceManager"
class="org.apache.activemq.pool.ActiveMQResourceManager"
init-method="recoverResource">
<property name="transactionManager" ref="recoverableTxManager" />
<property name="connectionFactory" ref="activemqConnectionFactory" />
<property name="resourceName" value="activemq.${name}" />
</bean>
<reference id="recoverableTxManager"
interface="org.apache.geronimo.transaction.manager.RecoverableTransactionManager"
availability="mandatory" />
I have a route looking like:
<from uri="activemq://item_updates?concurrentConsumers=20" />
<delay><constant>5000</constant></delay>
<log message="item ${header.item_id}" />
I expect to see something like:
item 1
item 2
item 3
item 4
item 5
<5 seconds pause>
item 6
item 7
..etc
Instead the output looks like:
item 1
<5 seconds pause>
item 2
<5 seconds pause>
..etc
My guesses are:
- all messages are being prefetched by the first concurrent consumer?
-or-
- it has something to do with pooled ActiveMQ connections?
-or-
- ???
Looking at examples and documentation it should be simple and easy. In
my case it's not.