Return-Path: Delivered-To: apmail-camel-dev-archive@www.apache.org Received: (qmail 55112 invoked from network); 2 Jul 2010 13:48:27 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 2 Jul 2010 13:48:27 -0000 Received: (qmail 28172 invoked by uid 500); 2 Jul 2010 13:48:27 -0000 Delivered-To: apmail-camel-dev-archive@camel.apache.org Received: (qmail 27550 invoked by uid 500); 2 Jul 2010 13:48:25 -0000 Mailing-List: contact dev-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list dev@camel.apache.org Received: (qmail 27533 invoked by uid 99); 2 Jul 2010 13:48:24 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Jul 2010 13:48:24 +0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=FREEMAIL_FROM,SPF_PASS,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of claus.ibsen@gmail.com designates 209.85.161.45 as permitted sender) Received: from [209.85.161.45] (HELO mail-fx0-f45.google.com) (209.85.161.45) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Jul 2010 13:48:18 +0000 Received: by fxm10 with SMTP id 10so2462854fxm.32 for ; Fri, 02 Jul 2010 06:47:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:in-reply-to :references:from:date:message-id:subject:to:content-type; bh=dkCCES6MC1/J32xwNH9sGVgRuhLyIzPD9gopeOlMTtE=; b=v59IUn2kokLYIkDsFHAy+i+Oj4FiWMWsfQdJVVWcy855u5ikOZzzgVD+BRainzHtdJ 8zxc00+otUWxEL4/G1Gdw9C/eb664rZcRPcWkFzAGRNqzjLvYQpfxC7F+ktFxIU/DVqb cyUT+AIzFmmD/ee3GCvz8dFNvFQsDvMb3z9zM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; b=GM9DVGbRIzIbupF+re2f3GabafrBA0DCB6uIrzAt2BxnNLdV3c+JHxb4M7KKOklDXo TIeHgly8blEy8r68fErW/vnutc8HMb08ohh0PblHmWr2ahOPCn1sZWD0Q8sCY2zRxhce Nty4demm+CiU1RDa2gIy8Npi/9mGQgGGBGVGs= Received: by 10.223.118.19 with SMTP id t19mr880622faq.2.1278078477580; Fri, 02 Jul 2010 06:47:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.103.209 with HTTP; Fri, 2 Jul 2010 06:47:29 -0700 (PDT) In-Reply-To: References: From: Claus Ibsen Date: Fri, 2 Jul 2010 15:47:29 +0200 Message-ID: Subject: Re: Asynchronous Routing Engine - Status To: dev@camel.apache.org Content-Type: text/plain; charset=ISO-8859-1 X-Virus-Checked: Checked by ClamAV on apache.org On Fri, Jul 2, 2010 at 3:33 PM, Claus Ibsen wrote: > Hi > > Just to update the status that today I have implemented > > a) error handler will now schedule delayed redeliveries by default > which thus allows to not block while the delay occurs. You can disable > this behavior using the syncDelayed() option on the error handler / > onException / routePolicy. And if you use transactions it will use > synced delays to ensure the exchange will use the same thread again as > the Transaction Manager requires to execute in the same thread > context. > Just a though. Do anyone think it would be best to keep the old behavior as default? To block while delaying when routing synchronous? For a single consumer thread this could cause it to be able to pickup new messages which might also fail and thus stack up messages on the delayed redelivery task queue? I think I will flip back the default so it works as it have always done, then people can turn this option on to have async delayed if they want. > b) delay and throttle EIP now have an option asyncDelayed() you can > use to enable them to use non blocking delay as well > > The only question though would be if we should have an option to allow > you to cancel tasks on shutdown. If you have messages queued up in the > delay/throttle. Then a fast stop to cancel the pending tasks is > possible. However the JDK ExecutorService API is damn poor in terms of > stopping the thread pool. You can only shut it down which then cant > restart it. And getting the pending tasks is also not possible unless > you gather the Future references and then remember to keep this list > up to date removing the done tasks. > > > On Thu, Jul 1, 2010 at 1:58 PM, Claus Ibsen wrote: >> Hi >> >> The major goal for Camel 2.4 is introducing back the asynchronous >> routing engine from the Camel 1.x days. >> What we had replaced it with, just didn't cut it for the long run, so >> we had to toss it out and replace it back with the 1.x variation. >> However the 1.x variation is much more invasive in the camel core. >> However the benefits are worth it. >> >> There is a JIRA ticket to track this >> https://issues.apache.org/activemq/browse/CAMEL-2723 >> >> We got so far with the code that we can move ahead the release >> schedule for 2.4 and thus why Hadrian send out >> an announcement yesterday. >> >> The engine has been integrated with Apache ServiceMix JBI and NMR, >> which means that in SMX 4.3 and Came. 2.4 onwards >> you have much better scalability and utilization of the resources. >> >> There is present only a single Camel component which leverages the >> async routing as well which is Jetty. >> The consumer side uses Jetty continuations and the producer side the >> Jetty http async client. >> >> We plan to expand this to other Camel components where async >> communication is native supported by the component. >> Such as Netty, Mina 2 (when its out), CXF producer, REST stuff and what else. >> >> Mind that async routing does not work to the fullest if you are not >> using transactions. Spring TM requires the transactional resources to >> be >> executed from the same thread context, which is why Camel will >> fallback to route fully synchronous if you use transacted routes. >> This works automatic and you dont have to worry about it to configure >> any of the Camel endpoints to cater for this. It's just that Camel >> will have the caller thread blocked while waiting for the async reply, >> in case you for example to request/reply over NMR in a transaction. >> >> >> Almost all the EIP patterns in Camel have been refactored to support >> async routing engine as well. So you can use Splitter, Recipient List, >> WireTap >> and all the others in the most optimal way. Currently there are 3 >> outstanding works to be looked at: >> - Throttler and Delayer EIP to not block while waiting >> - Multicast, Recipient List and Splitter EIP to support async routing >> engine when parallelProcessing option is enabled (this is a bit tricky >> to do). >> - RedeliverErrorHandler to use non blocking while waiting for delivery >> (current only enabled if async routing has been kicked in) but we can >> do this in a general. >> >> >> >> >> -- >> Claus Ibsen >> Apache Camel Committer >> >> Author of Camel in Action: http://www.manning.com/ibsen/ >> Open Source Integration: http://fusesource.com >> Blog: http://davsclaus.blogspot.com/ >> Twitter: http://twitter.com/davsclaus >> > > > > -- > Claus Ibsen > Apache Camel Committer > > Author of Camel in Action: http://www.manning.com/ibsen/ > Open Source Integration: http://fusesource.com > Blog: http://davsclaus.blogspot.com/ > Twitter: http://twitter.com/davsclaus > -- Claus Ibsen Apache Camel Committer Author of Camel in Action: http://www.manning.com/ibsen/ Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/ Twitter: http://twitter.com/davsclaus