SpringでApache Camelを使用する
1. 概要
この記事では、SpringでApache Camelを構成して使用する方法を示します。
Apache Camelは、JPA、Hibernate、FTP、Apache-CXF、AWS-S3、そしてもちろん他の多くのライブラリをサポートする非常に多くの便利なコンポーネントを提供します。 2つの異なるシステム間でデータを統合するのに役立ちます。
たとえば、HibernateおよびApache CXFコンポーネントを使用すると、データベースからデータを取得し、REST API呼び出しを介して別のシステムに送信できます。
このチュートリアルでは、簡単なCamelの例について説明します。ファイルを読み取り、その内容を大文字に変換してから小文字に戻します。 CamelのFile componentとSpring4.2を使用します。
例の詳細は次のとおりです。
-
ソースディレクトリからファイルを読み取る
-
カスタムProcessorを使用してファイルの内容を大文字に変換する
-
変換された出力を宛先ディレクトリに書き込む
-
Camel Translatorを使用してファイルの内容を小文字に変換する
-
変換された出力を宛先ディレクトリに書き込む
2. 依存関係を追加
SpringでApache Camelを使用するには、POMファイルに次の依存関係が必要です。
2.16.1
4.2.4.RELEASE
org.apache.camel
camel-core
${env.camel.version}
org.apache.camel
camel-spring
${env.camel.version}
org.apache.camel
camel-stream
${env.camel.version}
org.springframework
spring-context
${env.spring.version}
だから、我々は持っています:
-
camel-core – ApacheCamelの主な依存関係
-
camel-spring –SpringでCamelを使用できるようにします
-
camel-stream –オプションの依存関係。これを使用して(たとえば)ルートの実行中にコンソールにメッセージを表示できます。
-
spring-context –標準のSpring依存関係。この場合、SpringコンテキストでCamelルートを実行するために必要です。
3. SpringCamelコンテキスト
まず、Spring Configファイルを作成します。このファイルで、後でCamelルートを定義します。
ファイルに必要なすべてのApache CamelおよびSpring名前空間とスキーマの場所が含まれていることに注意してください。
<camelContext>要素は(当然のことながら)Camelコンテキストを表し、Springアプリケーションコンテキストと比較できます。 これで、コンテキストファイルでCamelルートの定義を開始できます。
3.1. カスタムプロセッサを使用したCamelルート
次に、ファイルの内容を大文字に変換する最初のルートを記述します。
ルートがデータを読み取るソースを定義する必要があります。 これは、データベース、ファイル、コンソール、または他の任意のソースにすることができます。 私たちの場合、それはファイルになります。
次に、ソースから読み取られるデータのプロセッサを定義する必要があります。 この例では、カスタムプロセッサクラスを記述します。 このクラスは、標準のCamel Processor Interfaceを実装するSpringBeanになります。
データが処理されたら、処理されたデータの送信先へのルートを伝える必要があります。 繰り返しますが、これは、データベース、ファイル、コンソールなど、さまざまな出力の1つである可能性があります。 この例では、ファイルに保存します。
入力、プロセッサ、出力を含むこれらの手順を設定するには、次のルートをCamelコンテキストファイルに追加します。
さらに、myFileProcessorBeanを定義する必要があります。
3.2. カスタム大文字プロセッサ
次に、Beanで定義したカスタムファイルプロセッサを作成する必要があります。 CamelProcessorインターフェースを実装し、Exchangeオブジェクトを入力として受け取る単一のprocessメソッドを定義する必要があります。 このオブジェクトは、入力ソースからのデータの詳細を提供します。
このメソッドは、Exchangeからメッセージを読み取り、コンテンツを大文字にしてから、その新しいコンテンツをExchangeオブジェクトに戻す必要があります。
public class FileProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
String originalFileContent = (String) exchange.getIn().getBody(String.class);
String upperCaseFileContent = originalFileContent.toUpperCase();
exchange.getIn().setBody(upperCaseFileContent);
}
}
このプロセスメソッドは、ソースから受信したすべての入力に対して実行されます。
3.3. 小文字プロセッサ
次に、別の出力をCamelルートに追加します。 今回は、同じ入力ファイルのデータを小文字に変換します。 ただし、今回はカスタムプロセッサは使用しません。 Apache CamelのMessage Translator featureを使用します。 これは、更新されたCamelルートです。
${body.toLowerCase()}
4. アプリケーションを実行する
ルートを処理するには、CamelコンテキストファイルをSpringアプリケーションコンテキストにロードするだけです。
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("camel-context.xml");
ルートが正常に実行されると、2つのファイルが作成されます。1つは大文字のコンテンツ、もう1つは小文字のコンテンツです。
5. 結論
統合作業を行っている場合、ApacheCamelは間違いなく物事を簡単にすることができます。 このライブラリは、定型コードを削減し、データ処理のメインロジックに集中するのに役立つプラグアンドプレイコンポーネントを提供します。
また、Enterprise Integration Patternsの概念を詳細に調べたい場合は、EIPを非常に明確に概念化したGregorHohpeとBobbyWoolfによって作成されたthis bookを確認する必要があります。
この記事で説明されている例は、project on GitHubで利用できます。