2.3.2. 错误处理程序
概述
errorHandler ()
子句提供与 Exception
子句类似的功能,但这种机制在不同的异常类型之间 无法识别。errorHandler ()
子句是 Apache Camel 提供的原始异常处理机制,并在实施 onException
子句之前可用。
Java DSL 示例
errorHandler ()
子句在 RouteBuilder
类中定义,并应用到该 RouteBuilder
类中的所有路由。每当某个适用路由 中发生任何种类 异常时,会触发。例如,要定义将所有失败交换路由到 ActiveMQ deadLetter
队列的错误处理程序,您可以定义 RouteBuilder
,如下所示:
public class MyRouteBuilder extends RouteBuilder { public void configure() { errorHandler(deadLetterChannel("activemq:deadLetter")); // The preceding error handler applies // to all of the following routes: from("activemq:orderQueue") .to("pop3://fulfillment@acme.com"); from("file:src/data?noop=true") .to("file:target/messages"); // ... } }
但是,不会发生重定向到死信频道,直到所有尝试重新传送都已耗尽。
XML DSL 示例
在 XML DSL 中,您可以使用 errorHandler
元素在 camelContext
范围中定义错误处理程序。例如,要定义将所有失败交换路由到 ActiveMQ deadLetter
队列的错误处理程序,您可以按照如下所示定义 errorHandler
元素:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:camel="http://camel.apache.org/schema/spring" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <camelContext xmlns="http://camel.apache.org/schema/spring"> <errorHandler type="DeadLetterChannel" deadLetterUri="activemq:deadLetter"/> <route> <from uri="activemq:orderQueue"/> <to uri="pop3://fulfillment@acme.com"/> </route> <route> <from uri="file:src/data?noop=true"/> <to uri="file:target/messages"/> </route> </camelContext> </beans>
错误处理程序的类型
表 2.1 “错误处理程序类型” 概述了您可以定义的不同错误处理程序。
Java DSL Builder | XML DSL 类型属性 | 描述 |
---|---|---|
|
| 将异常传播回调用者并支持重新传送策略,但它不支持死信队列。 |
|
| 支持与默认错误处理程序相同的功能,同时也支持死信队列。 |
|
| 每当发生异常时记录异常文本。 |
|
| 可以用来禁用错误处理器的 dummy 处理程序。 |
| 用于转换路由的错误处理程序。默认事务错误处理程序实例将自动用于标记为已翻译的路由。 |