5.3. メッセージエンドポイント
概要
メッセージエンドポイント は、アプリケーションとメッセージングシステム間のインターフェイスです。図5.3「Message Endpoint パターン」 のように、送信者のエンドポイントがあります。これは、プロキシーまたはサービスコンシューマーとも呼ばれ、In メッセージの送信を担当します。また、受信者のエンドポイントもあります。これはエンドポイントまたはサービスとも呼ばれ、In メッセージの受信を担当します。
図5.3 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。 | |
| エンドポイントに送信する際に使用する特定の交換パターンを設定します。元の MEP は後で復元されます。 | |
|
再利用のためにプロデューサーをキャッシュする、 | |
|
| 解決できないエンドポイント URI を無視するかどうかを指定します。無効にすると、Camel は無効なエンドポイント URI を特定する例外を出力します。 |