5.3. メッセージエンドポイント

概要

メッセージエンドポイント は、アプリケーションとメッセージングシステム間のインターフェイスです。図5.3「Message Endpoint パターン」 のように、送信者のエンドポイントがあります。これは、プロキシーまたはサービスコンシューマーとも呼ばれ、In メッセージの送信を担当します。また、受信者のエンドポイントもあります。これはエンドポイントまたはサービスとも呼ばれ、In メッセージの受信を担当します。

図5.3 Message Endpoint パターン

Message Endpoint パターン

エンドポイントのタイプ

Apache Camel は、2 つの基本タイプのエンドポイントを定義します。

  • コンシューマーエンドポイント: Apache Camel ルートの最初にあり、受信チャネルから In messages を読み取ります (受信者エンドポイントと同等です)。
  • プロデューサーエンドポイント: Apache Camel ルートの最後にあり、 In メッセージを送信チャネルに書き込みます (送信者 エンドポイントと同等です)。複数のプロデューサーエンドポイントでルートを定義できます。

エンドポイント URI

Apache Camel では、エンドポイントはエンドポイント URI で表され、通常は以下のようなデータをカプセル化します。

  • コンシューマーエンドポイントのエンドポイント URI: 特定の場所をアドバタイズします (たとえば、送信者が接続できるサービスを公開する場合など)。または、URI でメッセージキューなどのメッセージソースを指定できます。エンドポイント URI には、エンドポイントの設定を含めることができます。
  • プロデューサーエンドポイントのエンドポイント URI: メッセージの送信先の詳細と、エンドポイントの設定が含まれます。URI はリモートレシーバーエンドポイントの場所を指定する場合があります。それ以外の場合には、宛先にはキュー名などの抽象的な形式を含むことができます。

Apache Camel のエンドポイント URI の一般的な形式は次のとおりです。

ComponentPrefix:ComponentSpecificURI

ComponentPrefix は、特定の Apache Camel コンポーネントを識別する URI 接頭辞に置き換えます (サポートされるすべてのコンポーネントの詳細は Apache Camel コンポーネントリファレンス を参照してください)。URI である ComponentSpecificURI の残りの部分には特定のコンポーネントによって定義された構文があります。たとえば、JMS キュー Foo.Bar に接続するには、以下のようにエンドポイント URI を定義できます。

jms:Foo.Bar

コンシューマーエンドポイント file://local/router/messages/foo を直接プロデューサーエンドポイント jms:Foo.Bar に接続するルートを定義するには、以下の Java DSL フラグメントを使用できます。

from("file://local/router/messages/foo").to("jms:Foo.Bar");

または、以下のように XML で同じルートを定義することもできます。

<camelContext id="CamelContextID" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="file://local/router/messages/foo"/>
    <to uri="jms:Foo.Bar"/>
  </route>
</camelContext>

Dynamic To

<toD> パラメーターにより、連結された 1 つ以上の式を使用して、動的に計算されたエンドポイントにメッセージを送信することができます。

デフォルトでは、Simple 言語はエンドポイントの計算に使用されます。以下の例では、ヘッダーによって定義されたエンドポイントにメッセージを送信します。

<route>
  <from uri="direct:start"/>
  <toD uri="${header.foo}"/>
</route>

Java DSL では、同じコマンドの形式は以下のようになります。

from("direct:start")
  .toD("${header.foo}");

以下の例のように、URI の前にリテラルを付けることもできます。

<route>
  <from uri="direct:start"/>
  <toD uri="mock:${header.foo}"/>
</route>

Java DSL では、同じコマンドの形式は以下のようになります。

from("direct:start")
  .toD("mock:${header.foo}");

上記の例では、header.foo の値が orange の場合、URI は mock:orange として解決されます。

Simple 以外の言語を使用するには、language: パラメーターを定義する必要があります。パートII「ルーティング式と述語言語」を参照してください。

異なる言語を使用する場合の形式では、URI で language:languagename: を使用します。たとえば、Xpath を使用する場合は、以下の形式を使用します。

<route>
  <from uri="direct:start"/>
  <toD uri="language:xpath:/order/@uri/">
</route>

Java DSL では同じ例が以下のようになります。

from("direct:start")
  .toD("language:xpath:/order/@uri");

language: を指定しない場合、エンドポイントはコンポーネント名になります。場合によっては、コンポーネントと言語の名前は xquery のように同じになります。

+ 記号を使用して複数の言語を連結できます。以下の例では、URI は Simple 言語と Xpath 言語の組み合わせです。Simple がデフォルトであるため、言語を定義する必要はありません。+ 記号の後は、language:xpath で示される Xpath 命令があります。

<route>
  <from uri="direct:start"/>
  <toD uri="jms:${header.base}+language:xpath:/order/@id"/>
</route>

Java DSL では形式は以下のようになります。

from("direct:start")
  .toD("jms:${header.base}+language:xpath:/order/@id");

多くの言語を一度に連結できます。それぞれの言語を + で区切り、各言語を language:languagename で指定します。

toD で以下のオプションを設定することができます。

名前

デフォルト値

説明

uri

 

必須のオプション: 使用する URI。

pattern

 

エンドポイントに送信する際に使用する特定の交換パターンを設定します。元の MEP は後で復元されます。

cacheSize

 

再利用のためにプロデューサーをキャッシュする、ProducerCache のキャッシュサイズを設定します。デフォルトのキャッシュサイズは 1000 で、他の値が指定されていない場合に使用されます。値を -1 に設定すると、キャッシュを完全にオフにします。

ignoreInvalidEndpoint

false

解決できないエンドポイント URI を無視するかどうかを指定します。無効にすると、Camel は無効なエンドポイント URI を特定する例外を出力します。