Agree. I think we went overboard in supporting the same scenarios in multiple ways. What is convenient syntactic sugar for some is a source of confusion for many.
My $0.02, Hadrian On Aug 9, 2011, at 12:20 PM, Christian Schneider wrote: > Hi Claus, > > without changing anything in camel wouldn´t a simple change in the route also > work? > > from("activemq:queue:inbox?synchronous=true") > .threads() > .to("jetty:http://0.0.0.0:9432/myapp") > .to("log:result?groupSize=10", "mock:result"); > > So I ask myself if we really need async support in the jms consumer if we can > support the scenario using a well known dsl element. > > Christian > > > Am 09.08.2011 14:25, schrieb Claus Ibsen: >> Hi >> >> See ticket >> https://issues.apache.org/jira/browse/CAMEL-3632 >> >> Take a look at the following routes >> >> from("activemq:queue:inbox?synchronous=true") >> .to("jetty:http://0.0.0.0:9432/myapp") >> .to("log:result?groupSize=10", "mock:result"); >> >> from("jetty:http://0.0.0.0:9432/myapp") >> .delay(100) >> .transform(body().prepend("Bye ")); >> >> >> Its a fairly simple flow JMS -> JETTY -> MOCK >> >> The JMS consumer will by default be in synchronous mode. Ticket >> CAMEL-3632 is to optimize this by supporting asynchronous routing if >> the JMS consumer is *not* transactional, and *not* sending back a >> reply message. >> >> So the scenarios is for high performance one way messaging. >> >> The 2nd route above simulate a little processing time, which takes 100 >> millis. >> >> If we run a test where we send 1000 messages to the queue. How long >> time would it take to process those messages synchronously? Of course >> roughly 1000 * 0.1 sec = 100 sec. On my laptop it takes: >> Took: 1 minute (105393 millis) >> >> Now imagine we set synchronous=false on the JMS consumer so it runs >> asynchronously. How fast would it then go? Well lets try >> Took: 10.742 seconds (10742 millis) >> >> That is a lot fast, well of couse its about 10x faster, since the JMS >> consumer is not blocked waiting for the JETTY reply. >> However the messages is now not processed in sequence, that is the cost. >> >> To note in both scenarios this was done with 1 JMS consumer thread. I >> did not enable concurrentConsumers. So with the async routing engine >> we could scale and utilize the CPU resources better. >> >> This seems like a great addition. And if we add this, we should add >> some documentation with the pros/cons for using this. >> >> My question is what would a sensitive default setting be? Should we >> let the JMS consumer be kept as synchronous by default, to keep it >> fully backwards compatible. Then end users must manually set >> synchronous=false on the JMS endpoint to enable that. >> >> Any thoughts? >> >> >> >> >> >> >> >> >> > > -- > Christian Schneider > http://www.liquid-reality.de > > Open Source Architect > http://www.talend.com >