The old thread http://camel.465427.n5.nabble.com/Transactional-batching-td474002.html#a4721633 touches the same problem but w/o an solution.
2011/8/21 Viju <vvbiju2...@gmail.com> > 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. > -- -- David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen