So what's the underlying concurrency issue? Ordering? Can you just have a route that multiplexes all of those incoming queues into a single queue (or in-mem queue) and then have a route w/ only one thread that does CBR and invoke the correct bean?
On Thu, Sep 5, 2013 at 9:02 AM, gnani swami <projectnash1...@gmail.com>wrote: > Hi, > > Camel was wonderful piece of software and using it in production for more > than a year. Our version of Camel was 2.10.1 > > I recently added few additional route (and bug in buz logic too) to > interface with additional systems, all the routes are doing the similar > job. They read JMS message from an unique-end-point (MQ JMS Queue) and > invoke buzComponent (Camel component). > > But recently discovered that some subtle concurrency issues inside the > buzComponent causing trouble to us. And I am looking for some sort of Camel > hack to prevent it from further damage by making all the end-point consumer > to use one and only thread. > > 1) As a short term solution, we like to convert all the JMS component to > use single threaded threadPool (or taskExecutor), and that new thread pool > shouldn't allow more than a thread across all the JMS end-point. Is it > possible? We are not worried about latency and performance for some time. > > 2) if there is a possibility, our camel error handlers were already > in-place, Can we assume that single thread would continue working despite > any exception configured to errorHandler. ErrorHandlers will have its own > thread. > > 3) I am also happy to introduce one or more route and end-point inside > camelcontex.xml, so all the buzComponent can be redirected into that new > route to make it SingleThreaded execution somehow.. are there any > suggestion to use some camel component (We could use any hack as long as > configurable inside xml). > > I am pretty sure all the above approach may be short sighted, but looking > for temporary solution which could work for few days. We are happy to > modify Camel xml, than changing code and making it complex. > > I appreciate feedback. > > Regards > Mohan > > <camelContext> > <route id="route-one"> > <from uri="ibmmq1:queue:fromSourceOne" /> > <inOnly uri="direct://buzComponent" /> > </route> > <route id="route-two"> > <from uri="ibmmq2:queue:fromSourceTwo" /> > <inOnly uri="direct://buzComponent" /> > </route> > <!-- problematic root due to buzComponent locking--> > <route id="high-speed-source-source-3"> > <from uri="ibmmq3:queue:fromHighSpeedSourceOne" /> > <inOnly uri="direct://buzComponent" /> > </route> > <route id="high-speed-source-source-4"> > <from uri="ibmmq4:queue:fromHighSpeedSourceTwo" /> > <inOnly uri="direct://buzComponent" /> > </route> > </camelContext> > > <bean id="ibmmq" class="org.apache.camel.component.jms.JmsComponent"> > <property name="connectionFactory"> > <bean class="com.ibm.mq.jms.MQConnectionFactory"> > ... > </bean> > </property> > </bean> > -- *Christian Posta* http://www.christianposta.com/blog twitter: @christianposta