Im using a camel route which is transacted. I have set the transacted
property to be true in the JMSComponent via JMSConfig. In the route which
listens to a message on a queue (Consumer) , I have provided <transacted />
tag which makes the route transacted. 

The DSL snippet is -
<bean id="jmsconfig"
class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="connFactory" />
        <property name="transactionManager" ref="jmsTxnManager" />
        <property name="transacted" value="true" />
</bean>

<camel:route id="processor">
                        <camel:from uri="myqueue" />
                         <camel:transacted/>
...............


The other properties of the message and consumers are 
a. Messages are persistent
b. There are 80 concurrent consumers listening to the same queue. 
c. The route, after receiving the message, passes the message to a bean that
process the message. 

I made two test runs . one with transaction and the other without a
transaction. The observation is as follows 
with transaction : route can consume 13 messages / second
without transaction: route can consume 60 messages / second.  This is like 5
times faster than with transaction. 

Im searching for options which will make the route faster with transactions. 

I read a post which states that, once we put transaction, the read and write
from the queue is made synchronous. Is it also synchronized i.e. if I have
80 concurrent consumers, only one will commit at a time? So more consumers,
more slow due to locking. 

I read another post which states that we can use batches. i.e. each message
should not be just one transaction. We need to batch a set of messages into
one transaction , say 100. 
I could not figure out how to enable this in my DSL? Any pointers?

Also, if I use batching for messages with transaction and my beans processed
80 messages of the 100 in a batch and then JVM crashed, the 100
messages(including the 80 that is processed by the business logic) will be
recorded as not delivered in AMQ and hence will be redelivered next time.
This means that, the 80 messages will be reprocessed (Putting an idempotent
consumer fixes it but this is a workaround only in my opinion) . Is the
understanding correct? 




--
View this message in context: 
http://camel.465427.n5.nabble.com/Camel-Transaction-performance-use-of-batches-tp4720389p4720389.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to