Jboss-fuse-camel-concepts

提供:Dev Guides
移動先:案内検索

JBoss Fuse-キャメルの概念

この章では、さまざまなラクダの概念を理解します。 まず、基本的な例を取り上げて、基本的な概念を理解しましょう。

CamelContext

すべてのラクダアプリケーションには、少なくとも1つのCamelContextがあります。 これは、ラクダルートを追加する場所です。 Springの ApplicationContext に似ています。

キャメルコンテキストは、すべてをまとめて保持するコンテナと考えることができます。 1つのラクダコンテキストに複数のルートを含めることができます。

ルート

CamelContextには1つ以上のルートが含まれる場合があります。 ルートは、あるエンドポイントから別のエンドポイントにキャメルコンテキストでデータが流れる方法を定義する統合ロジックです。

終点

エンドポイントは、システムがメッセージを送受信できるチャネルの終わりです。 これは、通信言語で宛先または送信元と呼ばれるものです。

コンポーネント

コンポーネントはCamelの拡張ポイントです。 コンポーネントは、テクノロジー、データ形式、トランスフォーマーなどへのインターフェースになります。 また、エンドポイントのファクトリとして機能する場合もあります。

コンポーネント

EIP

EIPは、Enterprise Integration Patternの略です。 これらは、繰り返し発生する問題に対する特定された既知のソリューションです。 Camelは、エンタープライズ統合パターンのほとんどをサポートしています。

コンテンツベースのルーター

CBRパターンを使用すると、入力ファイルのコンテンツに従ってデータをルーティングできます。

コンテンツベースのルーター

このパターンは、入力の本文の内容に応じて値をルーティングする必要がある場合に使用されます。

次の例は、 D:/data/input ディレクトリからデータを読み取ります。 読み取り後、データタグ内の値タグをチェックします。 値タグに value1 が含まれている場合、 D:/value1 に送信されます。 value2 が含まれている場合、 D:/value2 に送信され、これらの両方が存在しない場合は、他の人に送られました。

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/data/input"/>
      <choice>
         <when>
            <xpath>/data/value = 'value1'</xpath>
            <to uri = "file:///D:/value1"/>
         </when>
         <when>
            <xpath>/data/value = 'value2'</xpath>
            <to uri = "file:///D:/value2"/>
         </when>

         <otherwise>
            <to uri = "file:///D:/others "/>
         </otherwise>

      </choice>
   </route>
</camelContext>

入力

D:/data/input/message1.xml

<data>
   <value>value1</value>
</data>

D:/data/input/message2.xml

<data>
   <value>value2</value>
</data>

出力

D:/value1/

<data>
   <value>value1</value>
</data>

D:/value2/

<data>
   <value>value2</value>
</data>

スプリッタ

スプリッターパターンは、入力データを小さなチャンクに分割するために使用されます。

スプリッター

このパターンはほとんどの場合、チャンクに分割する必要がある巨大なデータ入力で使用されるため、処理可能になります。 入力トークン文字列に基づいて、入力をより小さなフラグメントに分解します。

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/inbox"/>
      <split streaming = "true">
         <tokenize token = "order" xml = "true"/>
         <to uri = "activemq:queue:order"/>
      </split>
   </route>
</CamelContext>

入力

D:/inbox/message.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

出力

AMQをチェックすると、3つのメッセージが投稿されます。

<order>
   <data>
      <value>value4</value>
   </data>
</order>

受信者リスト

受信者リストパターンは、受信者のリストをメッセージ本文から取得する必要がある場合に使用されます。

受信者リスト

次の例では、顧客タグにリストされているすべての受信者に、コンマ区切りの文字列のリストとしてメッセージが送信されます。

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "jms:xmlOrders"/>
      <recipientList>
         <xpath>/order/customer</xpath>
      </recipientList>
   </route>
</camelContext>

その他のEIP

キャメルは、特定されたほぼすべてのEIPをサポートします。 一般的に使用されるEIPの一部は以下のとおりです。

  • Log -メッセージ全体またはその一部を記録する
  • メッセージフィルター-メッセージの内容のフィルタリング
  • Re-Sequencer -すべてのトークンを順番に取得する
  • 盗聴-旅行中のメッセージを検査する

EIPとその使用法の完全なリストは、Camelの公式ドキュメントhttp://camel.apache.org/eiplにあります。

キャメルの例外処理

エラーハンドラの使用-これは、ラクダで例外を処理する最も簡単な方法です。

これを使用するには、エラーハンドラクラスBeanを設定し、 CamelContext errorHandlerRef 属性への参照として提供する必要があります。

<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
   <property name = "logName" value = "mylogger.name"/>
   <property name = "level" value = "DEBUG"/>
</bean>

<camelContext errorHandlerRef = ” loggingErrorHandler” >
   …
</camelContext>

Try Catch finallyの使用

Camelは、エラー処理のためにJavaスタイルの* Try Catch finallyブロック*もサポートしています。

Javaと同様に、次の3つのブロックがあります-

  • doTry ブロックには、例外を生成する可能性のあるコードが含まれています。
  • doCatch ブロックには、例外の場合に実行する必要があるコードが含まれています。
  • doFinally ブロックには、例外に関係なく実行する必要があるコードがあります。 例外が発生したかどうかに関係なく、常に実行されます。

-モックはコンポーネントをテストしているため、他の目的には推奨されません。 テスト駆動開発のjMOckコンポーネントと同様に、テストに使用されるラクダのコンポーネントです。

<route>
   <from uri = "direct:start"/>
   <doTry>
      <process ref = "someProcesorThatmayFail"/>
      <to uri = "mock:result"/>

      <doCatch>
         <exception>java.io.IOException</exception>
         <exception>java.lang.IllegalStateException</exception>
         <to uri = "mock:catch"/>
      </doCatch>

      <doFinally>
         <to uri = "mock:finally"/>
      </doFinally>

   </doTry>
</route>

上記の例では、catchブロックで処理する必要がある例外のリストを指定できます。

Fuseでのバンドルの展開

*Fuse.bat/start.bat* を使用してFuseを起動します。

start.batを使用してFuseを起動する場合、client.batを使用してFuseに接続します。 次のスクリーンショットに示すようにUIを取得する必要があります。

Fuseでのバンドルのデプロイ

これはKarafおよびFuseコマンドにアクセスするためのCLIです。

install –s mvn:group.id/artifact.id/version
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT