Thanks Claus, I was able to get onException working by putting it inside the 
route in my route definition file.

<routes xmlns="http://camel.apache.org/schema/spring";>
  <route id="foo">
    <onException>
      ...

I could not figure a way to define an error handler or redeliveryPolicyProfile 
in a route definition file (as with bean definitions, it doesn't seem that 
Camel wants to read these kinds of definitions from a route definition file).

In order to specify an error handler, I had to add it to the SimpleRegistry 
manually before loading the routes, i.e.:

                    DeadLetterChannelBuilder errorHandler = new 
DeadLetterChannelBuilder();
                    
errorHandler.getRedeliveryPolicy().setMaximumRedeliveries(3);
                    errorHandler.getRedeliveryPolicy().setRedeliveryDelay(5000);
                    errorHandler.setDeadLetterUri(deadLetterDestination);
                    registry.put("deadLetterHandler", errorHandler );

Then I could refer to it in the route definition file:

<routes xmlns="http://camel.apache.org/schema/spring";>
  <route id="foo" errorHandlerRef="deadLetterHandler">
    ...

But in the end, I found that I could get my desired retry behavior using 
onException alone, so I abandoned the approach of registering an error handler 
programmatically.

Is there a better way to use an error handler in conjunction with a route 
definition file, other than the SimpleRegistry approach that I showed above?
 
Thanks
Mark


-----Original Message-----
From: Claus Ibsen [mailto:claus.ib...@gmail.com] 
Sent: Friday, February 06, 2015 12:14 AM
To: users@camel.apache.org
Subject: Re: Retry strategy with loadRoutesDefinition

Hi

You can inline error handler and onException in your XML routes.

On Thu, Feb 5, 2015 at 8:16 PM, Mark Kusec <mku...@mdacorporation.com> wrote:
> Hi all,
>
> I have refactored a legacy Java application (i.e. no web container) to use 
> Camel to send messages from files to a queue.  I chose to describe my routes 
> in XML so the routes could be re-used in a future Spring web application.  My 
> legacy application loads the XML routes using 
> ModelCamelContext.loadRoutesDefinition().
>
> Because I don't have Spring, I'm limited in what I can describe in my XML 
> file.  Although the documentation isn't too specific, I believe that the XML 
> file can only contain routes.  For example, I can't declare beans in the XML 
> file, so I declare them in a SimpleRegistry and provide that to the 
> CamelContext before I load the routes definition file.
>
> I am having trouble finding a way to give Camel a retry strategy for when 
> there are connectivity issues with the broker.  How would I give Camel 
> instructions on how many times to retry, backoff multipliers, etc?
>
> Since my XML file only contains routes, it doesn't seem like I can use 
> <onException> or <errorHandler>.  Is there some alternate way to declare 
> either of these, without switching to the Java DSL?
>
> (Also, according to 
> http://camel.465427.n5.nabble.com/global-onException-doesnt-apply-for-routes-loaded-with-loadRoutesDefinition-td4288369.html#a4290365,
>  it appears that routes loaded via loadRoutesDefinition don't get the benefit 
> of onException anyway, at least not until Camel 3.)
>
> If I'm on the wrong track, is there some other way that I can tell Camel to 
> retry periodically (forever) when it is unable to send to a queue?
>
> Thanks,
> Mark
>



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cib...@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/

Reply via email to