|
Page Created :
CAMEL :
Configuring error handling
Configuring error handling has been created by Claus Ibsen (Jan 03, 2009). Content:Configuring error handlingError handling in Camel can roughly be separated into two distinct types:
Where as non transactional is the most common type that is enabled out-of-the-box and orchestrated by Camel itself. Opposed to the transaction type that is orchestrated by a backing system such as a J2EE application server. When does an error happenAn error happens when
Non transactionalBy Default Camel uses the non transaction type and orchestrates the error handling during processing and routing. By default Camel uses a global Dead Letter Channel as the Error Handler. It's configured as:
As there isn't a single error handling configuration that suites all uses cases, you should consider altering the default configurations to better suit you needs. ScopesCamel supports 2 scopes for the non transactional type:
And 3 scopes for transactional type:
How does it workWhen Camel is started it will inspect the routing and weave in the error handling in the routing. As the error handling can be quite complex with up till 3 supported scopes it can be a bit complex. And on top of that you have inherited error handling and you can even configure Exception Clause to handle specific exception types differently. So yes it's advanced but very powerful when you get the grip of it. Snapshot basedTo keep things simple we first look at the basic concept how Camel orchestrates the redelivery attempt. At any given node in the route graph Camel intercepts the current Exchange being routed and wraps it with the Error Handler. This ensures that the Error Handler can kick in, just as the AOP around concept. Before the Exchange is being allowed to pass to the next node a snapshot of it is taken as a copy, and stored in the error handler. If the exchange could be routed without any problems then it's forwarded to the next node in the route graph, that yet again is wrapped by the Error Handler that does the AOP around stuff. But if there was an exception thrown, then the Error Handler kicks in and decides what to do. If it redeliver then it will use a copy of the original snapshot to ensure the exchange is exactly the same as before. The same applies if the exchange could not be redelivered and it should be moved into the dead letter queue. Then it's also the original exchange that is used plus the exception that caused this error is also set on the exchange. So Camel will only redeliver the last part of the route that failed. We need an example to illustrate this: from("seda:newOrder") .to("bean:validateOrder") .to("bean:storeOrder") .to("bean:confirmOrder");
TransactionalCamel leverages Spring transaction. Usually you can only use this with a limited number of transport types such as JMS or JDBC based, that yet again requires a transaction manager such as a Spring transaction, a J2EE server or a Message Broker. How does it workCamel does the same as weaving for non both types. The difference is that transactional is not snapshot based and the Error Handler does not kick in. You can say the AOP around does not apply. Camel relies solely on the backing system to orchestrate the error handling. And as such the when the backing system does redeliver it will start all over again. For instance if the exchanges was started by a JMS consumer then it's started again as the JMS messages is rolled back on the JMS queue and Camel will re consume the JMS message again. See Transactional Client for more. See also |
Unsubscribe or edit your notifications preferences
