1. 概要

この記事では、Springで ApacheCamelを構成および使用する方法について説明します。

Apache Camelは、 JPA Hibernate FTP Apache-CXF などのライブラリをサポートする非常に多くの便利なコンポーネントを提供します] AWS-S3 およびもちろん他の多くの–すべてが2つの異なるシステム間のデータ統合を支援します。

たとえば、HibernateおよびApache CXFコンポーネントを使用して、データベースからデータをプルし、RESTAPI呼び出しを介して別のシステムに送信できます。

このチュートリアルでは、簡単なCamelの例を見ていきます。ファイルを読み取り、その内容を大文字に変換してから小文字に戻します。 CamelのファイルコンポーネントとSpring4.2を使用します。

例の詳細は次のとおりです。

  1. ソースディレクトリからファイルを読み取る
  2. カスタムプロセッサを使用してファイルの内容を大文字に変換します
  3. 変換された出力を宛先ディレクトリに書き込みます
  4. CamelTranslatorを使用してファイルの内容を小文字に変換します
  5. 変換された出力を宛先ディレクトリに書き込みます

2. 依存関係を追加する

SpringでApacheCamelを使用するには、POMファイルに次の依存関係が必要です。

<properties>
    <env.camel.version>2.16.1</env.camel.version>
    <env.spring.version>4.2.4.RELEASE</env.spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>${env.camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>${env.camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-stream</artifactId>
        <version>${env.camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
</dependencies>

だから、私たちは持っています:

  • camel-core –ApacheCamelの主な依存関係
  • camel-spring –CamelをSpringで使用できるようにします
  • camel-stream –オプションの依存関係。これを使用して(たとえば)ルートの実行中にコンソールにメッセージを表示できます。
  • spring-context –標準のSpring依存関係。この場合、SpringコンテキストでCamelルートを実行するために必要です。

3. 春のラクダのコンテキスト

まず、Spring Configファイルを作成します。このファイルで、後でCamelルートを定義します。

ファイルに必要なすべてのApacheCamelおよびSpringの名前空間とスキーマの場所が含まれていることに注意してください。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:camel="http://camel.apache.org/schema/spring"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-4.2.xsd	
          http://camel.apache.org/schema/spring 
          http://camel.apache.org/schema/spring/camel-spring.xsd
          http://www.springframework.org/schema/util 
          http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<camelContext xmlns="http://camel.apache.org/schema/spring">
            <!-- Add routes here -->
	</camelContext>

</beans>

The elementは(当然のことながら)Camelコンテキストを表し、Springアプリケーションコンテキストと比較できます。 これで、コンテキストファイルでCamelルートの定義を開始する準備が整いました。

3.1. カスタムプロセッサを使用したキャメルルート

次に、ファイルの内容を大文字に変換する最初のルートを記述します。

ルートがデータを読み取るソースを定義する必要があります。 これは、データベース、ファイル、コンソール、またはその他の任意の数のソースにすることができます。 私たちの場合、それはファイルになります。

次に、ソースから読み取られるデータのプロセッサを定義する必要があります。 この例では、カスタムプロセッサクラスを作成します。 このクラスは、標準の Camel ProcessorInterfaceを実装するSpringBeanになります。

データが処理されたら、処理されたデータをどこに転送するかをルートに指示する必要があります。 繰り返しになりますが、これは、データベース、ファイル、コンソールなど、さまざまな出力の1つである可能性があります。 この例では、ファイルに保存します。

入力、プロセッサ、出力を含むこれらの手順を設定するには、Camelコンテキストファイルに次のルートを追加します。

<route>
    <from uri="file://data/input" /> <!-- INPUT -->
    <process ref="myFileProcessor" /> <!-- PROCESS -->
    <to uri="file://data/outputUpperCase" /> <!-- OUTPUT -->
</route>

さらに、myFileProcessorBeanを定義する必要があります。

<bean id="myFileProcessor" class="org.apache.camel.processor.FileProcessor" />

3.2. カスタム大文字プロセッサ

次に、Beanで定義したカスタムファイルプロセッサを作成する必要があります。 Camel Processor インターフェイスを実装し、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のメッセージ変換機能を使用します。 これは更新されたラクダのルートです:

<route>
    <from uri="file://data/input" />
    <process ref="myFileProcessor" />
    <to uri="file://data/outputUppperCase" />
    <transform>
        <simple>${body.toLowerCase()}</simple>
    </transform>
    <to uri="file://data/outputLowerCase" />
</route>

4. アプリケーションの実行

ルートを処理するには、CamelコンテキストファイルをSpringアプリケーションコンテキストにロードする必要があります。

ClassPathXmlApplicationContext applicationContext = 
  new ClassPathXmlApplicationContext("camel-context.xml");

ルートが正常に実行されると、2つのファイルが作成されます。1つは大文字のコンテンツを含み、もう1つは小文字のコンテンツを含みます。

5. 結論

統合作業をしている場合、Apache Camelは間違いなく物事を簡単にすることができます。 ライブラリは、ボイラープレートコードを削減し、データ処理のメインロジックに集中するのに役立つプラグアンドプレイコンポーネントを提供します。

また、エンタープライズ統合パターンの概念を詳しく調べたい場合は、EIPを非常に明確に概念化したGregorHohpeとBobbyWoolfによって書かれたこの本をご覧ください。

この記事で説明する例は、GitHubプロジェクトで利用できます。