ApacheCamel-Springでの使用

ここで、Springを使用して前の章のアプリケーションを再作成します。これにより、DSLではなくXMLでCamelルーティングを作成する方法がわかります。

新しいプロジェクトの作成

新しいを作成します Maven プロジェクトし、以下を指定します-

GroupId: BasketWithSpring
ArtifactId: BasketWithSpring

プロジェクトのデフォルトの場所を選択するか、必要に応じて選択したディレクトリを指定します。

依存関係の追加

以前のアプリケーションで使用したコア依存関係に加えて、Springを使用するにはさらにいくつかの依存関係を追加する必要があります。依存関係はpom.xmlに追加されます。ここで、pom.xmlを開き、次の依存関係を追加します-

<dependencies>
   ...
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.3.RELEASE</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.2</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.1</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
      <version>2.15.1</version>
   </dependency>
</dependencies>

Spring用のJavaDSLの作成

ここで、という新しいJavaクラスを作成しましょう。 DistributeOrderXML。次のコードを追加します-

public class DistributeOrderXML {
   public static void main(String[] args) throws Exception {
      ApplicationContext appContext = new ClassPathXmlApplicationContext(
         "SpringRouteContext.xml");
      CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
      try {
         camelContext.start();
         ProducerTemplate orderProducerTemplate = camelContext.createProducerTemplate();
         InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
            .getResource("order.xml").getFile());
         
         orderProducerTemplate.sendBody("direct:DistributeOrderXML", orderInputStream);
      } finally {
         camelContext.stop();
      }
   }
}

の中に main メソッド、最初にインスタンスを作成します ApplicationContext、Springアプリケーション内の中央インターフェースです。そのコンストラクターで、ルーティングおよびフィルタリング情報を含むXMLファイルの名前を指定します。

ApplicationContext appContext = new ClassPathXmlApplicationContext(
   "SpringRouteContext.xml");

次に、作成します CamelContext 上記で作成したものを指定する ApplicationContext そのパラメータで。

CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);

この時点で、ルーティングとフィルタリングが設定されています。したがって、私たちは開始しますCamelContext そのを使用して start方法。前の場合と同様に、order.xmlファイルをロードするためのエンドポイントを定義して処理を開始します。ここで、XMLでルーティングがどのように定義されているかを理解しましょう。

アプリケーションコンテキストの作成

プロジェクトに新しいXMLファイルを追加し、それを呼び出します SpringRouteContext.xml. このファイルに次の内容を切り取って貼り付けます。

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
   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.xsd
      http://camel.apache.org/schema/spring
      http://camel.apache.org/schema/spring/camel-spring.xsd ">
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <route>
         <from uri = "direct:DistributeOrderXML"/>
         <log message = "Split by Distribute Order"/>
         <split>
            <xpath>//order[@product = 'Oil']/items</xpath>
            <to uri = "file:src/main/resources/order/"/>
            <to uri = "stream:out"/>
         </split>
      </route>
   </camelContext>
</beans>

ここでは、xpathクエリを次のように定義します。ここで、「oil」のすべての注文を選択していることに注意してください。

<xpath>//order[@product = 'Oil']/items</xpath>

出力エンドポイントは複数です。最初のエンドポイントはorder フォルダと2番目のフォルダはコンソールを指定します。

<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>

アプリケーションを実行します。

試験結果

アプリケーションを実行すると、画面に次の出力が表示されます。

<items>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Original</Type>
      <Quantity>4</Quantity>
      <Price>25</Price>
   </item>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Lime</Type>
      <Quantity>6</Quantity>
      <Price>30</Price>
   </item>
</items>

チェックしてください order指定したパスのフォルダ。上記のXMLコードを含む新しく作成されたファイルがあります。

結論

Camelは、統合プロジェクトを容易にするためにEIPを実装するすぐに使用できるフレームワークを提供します。ドメイン固有言語でのコーディングとXMLの使用もサポートしています。