1概要

この記事では、Springでhttp://camel.apache.org/[Apache Camel]を構成および使用する方法を説明します。

Apache Camelには、http://camel.apache.org/jpa.html[JPA]、http://camel.apache.org/hibernate.html[Hibernate]、httpなどのライブラリをサポートする便利なコンポーネントが多数用意されています。//camel.apache.org/ftp2.html[FTP]、http://camel.apache.org/cxf.html[Apache-CXF]、http://camel.apache.org/aws-s3.html[[AWS-S3]そしてもちろん他の多くも – すべて2つの異なるシステム間でデータを統合するのを助けます。

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

このチュートリアルでは、単純なキャメルの例、つまりファイルを読み込んでその内容を大文字に変換してから小文字に変換する方法について説明します。

キャメルのhttp://camel.apache.org/file2.html[File component]とSpring 4.2を使用します。

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

  1. ソースディレクトリからファイルを読み込む

  2. カスタムを使用してファイルの内容を大文字に変換する


Processor

。変換された出力を宛先ディレクトリに書き込む

  1. を使用してファイルの内容を小文字に変換する


Camel翻訳者

。変換された出力を宛先ディレクトリに書き込む


2依存関係を追加

SpringでApache Camelを使用するには、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

    – Apache Camelの主な依存関係


  • camel-spring

    – SpringでCamelを使えるようにする


  • camel-stream

    – 使用できるオプションの依存関係

例)ルートが設定されている間にコンソールにメッセージを表示する
ランニング
**

spring-context

– 標準のSpring依存関係。

キャメルルートをSpringのコンテキストで実行しようとしているケース


3春のキャメルコンテクスト

まず、後でキャメルルートを定義するSpring Configファイルを作成します。

ファイルに必要なすべてのApache Camelおよび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>


<camelContext>

要素は(驚くことではないが)Camelコンテキストを表します。これはSpringアプリケーションコンテキストと比較することができます。これであなたのコンテキストファイルはキャメルルートの定義を始める準備ができています。


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

次に、ファイルの内容を大文字に変換する最初の方法を説明します。

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

それから、ソースから読み込まれるデータのプロセッサを定義する必要があります。この例では、カスタムプロセッサクラスを書きます。このクラスは、標準のhttp://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Camel Processor Interface]を実装するSpring Beanになります。

データが処理されたら、処理されたデータをどこに転送するかを経路に伝える必要があります。繰り返しますが、これはデータベース、ファイル、コンソールなど、さまざまな出力の1つです。私たちの場合は、ファイルに保存します。

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

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

さらに、

myFileProcessor

Beanを定義する必要があります。

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


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

今度は、Beanで定義したカスタムファイルプロセッサを作成する必要があります。

それは、入力として

Exchange

オブジェクトを受け取る単一の

process

メソッドを定義して、Camel

Processor

インターフェースを実装しなければなりません。このオブジェクトは、入力ソースからのデータの詳細を提供します。

このメソッドは

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. 小文字プロセッサ

それでは、キャメルルートに別の出力を追加しましょう。今回は、同じ入力ファイルのデータを小文字に変換します。今回は、カスタムプロセッサは使用しません。 Apache Camelのhttp://people.apache.org/~dkulp/camel/message-translator.html[Message Translator feature]を使用します。これは更新されたキャメルルートです:

<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を使用すると確実に作業が簡単になります。このライブラリは、定型コードを削減し、データ処理の主なロジックに集中するのに役立つプラグアンドプレイコンポーネントを提供します。


Enterprise Integration Patterns

の概念を詳しく調べたい場合は、http://www.amazon.com/Enterpriseをご覧ください。 – 統合パターン – 設計 – デプロイ/dp/0321200683[この本]はGregor HohpeとBobby Woolfによって書かれました。彼はEIPを非常にきれいに概念化しています。

この記事で説明している例はhttps://github.com/eugenp/tutorials/tree/master/spring-apache-camel[project on GitHub]にあります。