2.3.2. エラーハンドラー
概要
errorHandler()
句は、このメカニズムが異なる例外型を識別 できない 点を除いて、onException
句と同様の機能を提供します。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 ビルダー | XML DSL Type 属性 | 説明 |
---|---|---|
|
| 例外を呼び出し元に戻し、再配信ポリシーをサポートしますが、デッドレターキューはサポートされません。 |
|
| デフォルトのエラーハンドラーと同じ機能をサポートし、さらにデッドレターキューもサポートします。 |
|
| 例外が発生するたびに例外テキストをログに記録します。 |
|
| エラーハンドラーを無効にするために使用できるダミーのハンドラー実装。 |
| トランザクションが有効化されたルートのエラーハンドラー。トランザクションが有効化されたルートでは、デフォルトのトランザクションエラーハンドラーインスタンスが自動的に使用されます。 |