Read the section on "Request-reply over JMS" - you're looking for the threads option.
2012/2/6 Jim Newsham <jnews...@referentia.com>: > > Hi Ngoc Hai, > > I'm not talking at all about the producer side where replies are processed, > but the consumer side where requests are being received and processed. > Incoming requests are not being dispatched to idle threads; instead, they > are backing up behind a single (non-idle) thread. > > To me, this looks like a bug. I am interested in hearing the opinions of > the community on this point, and I'm willing to file a JIRA issue. > > Thanks, > Jim > > On 2/3/2012 6:32 PM, Pham Ngoc Hai wrote: >> >> Hi Jim, >> Since it's InOut queue, the reply is processed by a single thread as >> stated in here: http://camel.apache.org/jms.html no matter how many >> concurrentConsumer you set. >> Regards, >> Ngoc Hai. >> >> >> >> >> >> >> ________________________________ >> From: Jim Newsham<jnews...@referentia.com> >> To: users@camel.apache.org >> Sent: Saturday, February 4, 2012 10:55 AM >> Subject: jms concurrentConsumers is not competing consumers >> >> >> We are using Camel 2.9.0. We are using the "concurrentConsumers=n" option >> on our jms consumer endpoint so that we can handle numerous InOut requests >> concurrently. In Camel documentation, this option is described as >> supporting competing consumers, which I interpret to mean a pool of threads >> which are _competing_ to handle incoming requests. I expect that whenever a >> request comes in, that request will be processed by some idle thread from >> the thread pool (if there are any). However, this is not that behavior we >> are observing. Instead, I observe some requests not being processed >> immediately (or for quite some time), despite having numerous idle consumer >> threads, and this is causing a severe liveness issue for our application. >> >> Let me describe a simple scenario. Assume we have a single InOut jms >> queue with concurrentConsumers=3, and the following stream of messages (and >> required processing time): >> >> Message #0 - 1h >> Message #1 - 1s >> Message #2 - 1s >> Message #3 - 1s >> Message #4 - 1s >> Message #5 - 1s >> Message #6 - 1s >> Message #7 - 1s >> Message #8 - 1s >> Message #9 - 1s >> Message #10 - 1s >> >> Because Message #0 requires 1 hour to process, it will occupy one >> concurrent consumer thread for 1 hour. Nevertheless, we expect the >> remaining 2 threads should be able to handle the remaining 9 messages very >> quickly. Instead, messages #3, #6, #9 are not processed until Message #0 >> completes processing -- an hour later. Based on this observation, it >> appears that messages are dispatched to queues owned by individual threads, >> in round-robin fashion, instead of having threads compete to consume >> messages from a single queue. When some messages can take a long time to >> process, it can mean that messages can queue up and go unprocessed for a >> very long time, even when there are free threads. >> >> As you can see, this is not "competing consumers". Is the above behavior >> considered a bug? Are there any suggested workarounds? >> >> Thanks! >> Jim > > -- -- David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen