how does camel error handling scope work
jasonnh Mar 1, 2013 5:02 AMHi,
I am struggling to understand how error handlers work in camel and would appreciate any help.
As an example, below is a camel context with four endpoints (ioExceptionProcessor simply throws an IOException)
1] activemq:route1
This seems to ignore the dead letter error handler, i.e. no retries are attempted.
2] activemq:route2
Works as expected although it is interesting that 'route2-A 1' is not output on the retries, i.e. the retry goes back to the point of failure rather than the whole route.
3] activemq:route3
Introduces a doTry. I was expecting this to behave like route2 but it behaves like route1 and ignores the error handler.
4] activemq:route4
This does what I wanted route3 to do but I had to introduce an intermediate route (route4-A).
Please can anybody spot what I am doing wrong?
Thanks.
<camelContext trace="false" id="testBlueprintContext" xmlns="http://camel.apache.org/schema/blueprint"> <errorHandler useOriginalMessage="true" level="ERROR" deadLetterUri="activemq:test-dead" type="DeadLetterChannel" id="testDeadLetterErrorHandler"> <redeliveryPolicy logStackTrace="true" retryAttemptedLogLevel="INFO" backOffMultiplier="2" redeliveryDelay="1000" maximumRedeliveries="5"></redeliveryPolicy> </errorHandler> <route id="route1" errorHandlerRef="testDeadLetterErrorHandler"> <from uri="activemq:route1"></from> <log message="route1 1"></log> <to uri="direct:route1-A"></to> <log message="route1 2"></log> </route> <route id="route1-A" > <from uri="direct:route1-A"></from> <log message="route1-A 1"></log> <process ref="ioExceptionProcessor"></process> <log message="route1-A 2"></log> </route> <route id="route2"> <from uri="activemq:route2"></from> <log message="route2 1"></log> <to uri="direct:route2-A"></to> <log message="route2 2"></log> </route> <route id="route2-A" errorHandlerRef="testDeadLetterErrorHandler"> <from uri="direct:route2-A"></from> <log message="route2-A 1"></log> <process ref="ioExceptionProcessor"></process> <log message="route2-A 2"></log> </route> <route id="route3"> <from uri="activemq:route3"></from> <log message="route3 1"></log> <to uri="direct:route3-A"></to> <log message="route3 2"></log> </route> <route id="route3-A" errorHandlerRef="testDeadLetterErrorHandler"> <from uri="direct:route3-A"></from> <log message="route3-A 1"></log> <doTry> <process ref="ioExceptionProcessor"></process> <doCatch> <exception>java.io.IOException</exception> <handled> <constant>false</constant> </handled> <log message="route3-A 2"></log> </doCatch> <log message="route3-A 3"></log> </doTry> </route> <route id="route4"> <from uri="activemq:route4"></from> <log message="route4 1"></log> <to uri="direct:route4-A"></to> <log message="route4 2"></log> </route> <route id="route4-A" errorHandlerRef="testDeadLetterErrorHandler"> <from uri="direct:route4-A"></from> <log message="route4-A 1"></log> <to uri="direct:route4-B"></to> <log message="route4-A 2"></log> </route> <route id="route4-B"> <from uri="direct:route4-B"></from> <log message="route4-B 1"></log> <doTry> <process ref="ioExceptionProcessor"></process> <doCatch> <exception>java.io.IOException</exception> <handled> <constant>false</constant> </handled> <log message="route4-B 2"></log> </doCatch> <log message="route4-B 3"></log> </doTry> </route> </camelContext>
Edited by: jasonnh on Mar 1, 2013 9:52 AM
Edited by: jasonnh on Mar 1, 2013 10:00 AM