Apache-camel-components

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

Apache Camel-コンポーネント

Camelは、いくつかの事前に構築されたコンポーネントを提供します。

この章では、 camel-core モジュールのいくつかの重要なコンポーネントについて説明します。

Bean

*Bean* コンポーネントは、BeanをCamelメッセージ交換にバインドします。 エンドポイントを作成するURIは *bean:beanID* として指定されます。ここで、 *beanID* は *Registry* で指定されたBeanの名前です。
JndiContext jndiContext = new JndiContext();
jndiContext.bind("MilkOrder", new MilkOrderProcessor());
CamelContext camelContext = new DefaultCamelContext(jndiContext);

camelContext.addRoutes(new RouteBuilder() {
   public void configure() {
      from("direct:bigBasket")
         .to("bean:MilkOrder?method=placeOrder");
   }
});
  • bean:プロトコルを使用してエンドポイントを指定する方法に注意してください。 オプションで、呼び出すBeanメソッドを指定できます。この場合、エンドポイント式の評価中に *placeOrder というメソッドが呼び出されます。 MilkOrder は、コードスニペットの最初の2行で登録されている MilkOrderProcessor JavabeanのJNDI名です。 MilkOrderProcessor の定義自体は、簡潔にするためにここでは省略されています。

直接

前の例で Direct を使用していることに気付いたはずです。 石油ベンダーに注文を送信するために、エンドポイント仕様で direct:oil を使用しました。 Direct コンポーネントを使用すると、エンドポイントを同期的に呼び出すことができます。 前の例の次の2つのコードスニペットは、 Direct の使用を示しています-

.when(header("order").isEqualTo("oil"))
   .to("direct:oil")

And,

from("direct:DistributeOrderDSL")
   .process(myProcessor);

File

*File* コンポーネントは、マシン上のファイルシステムへのアクセスを提供します。 このコンポーネントを使用すると、他のコンポーネントからのメッセージをローカルディスクに保存できます。 さらに、他のCamelコンポーネントがローカルファイルを処理できるようにします。 Fileコンポーネントの使用中に、URI形式として *file:directoryName [?options]* または *file://directoryName [?options]* を使用できます。 あなたは以前にこのコンポーネントの使用を見てきました-
from ("file:/order").to("jms:orderQueue");
*File* コンポーネントはデフォルトでディレクトリ名を取ることに注意してください。 したがって、注文ディレクトリのコンテンツは入力コンテンツとして使用されます。 *order* ディレクトリ内の特定のファイルを指定するには、次のステートメントを使用します-
from ("file:/order?fileName = order.xml").to("jms:orderQueue");

Log

*Log* コンポーネントを使用すると、基になるロギングメカニズムにメッセージを記録できます。 Camelは、さまざまなロギングフレームワークの抽象化として、Simple Logging Facade for Java(SLF4J)を使用します。 ロギングには *java.util.logging、logback、log4j* を使用できます。 このコードスニペットは、*ログ*コンポーネントの使用を示しています-
from("direct:DistributeOrderDSL")
   .to("bean:MilkOrder?method = placeOrder")
   .to("log:com.example.com?level = INFO&showBody = true");

SEDA

*SEDA* コンポーネントを使用すると、同じ *CamelContext* 内の別のエンドポイントを非同期に呼び出すことができます。 CamelContextインスタンス間で呼び出したい場合は、 *VM* コンポーネントを使用する必要があります。 SEDAの使用はここに示されています-
from("direct:DistributeOrderDSL")
//send it to the seda queue that is async
   .to("seda:nextOrder")

このルートでは、注文を nextOrder 非同期キューにルーティングします。 このキューにサブスクライブしているクライアントは、このキューからメッセージを取得します。

タイマー

*Timer* コンポーネントは、定期的にメッセージを送信するために使用されるため、Camelアプリケーションのテスト中に非常に役立ちます。 ここのコードスニペットは、2秒ごとにコンソールにテストメッセージを送信します-
from("timer://testTimer?period = 2000")
   .setBody()
   .simple("This is a test message ${header.timer}")
      .to("stream:out");