8.7. Routing Slip
概要
図8.8「Routing Slip パターン」 に示されている Routing Slip パターンでは、一連のプロセスステップを通してメッセージを順番にルーティングできます。設計時にこのステップの順序は分かっておらず、メッセージごとに順序が変わる場合があります。メッセージが通過するエンドポイントのリストは、ヘッダーフィールド (Slip) に格納されます。Apache Camel は実行時に読み込み、パイプラインを構築します。
図8.8 Routing Slip パターン
Slip ヘッダー
Routing Slip は、ユーザー定義のヘッダーに表示されます。ヘッダーの値は、エンドポイント URI のコンマ区切りリストになります。たとえば、メッセージの復号、認証、および重複排除などの一連のセキュリティータスクの順序を指定する Routing Slip は、以下のようになります。
cxf:bean:decrypt,cxf:bean:authenticate,cxf:bean:dedup
現在のエンドポイントプロパティー
Camel 2.5 から Routing Slip は、現在のエンドポイントが slip であった場合、そのエンドポイントが含まれるプロパティー (Exchange.SLIP_ENDPOINT
) をエクスチェンジに設定します。これにより、エクスチェンジが slip 経由でどこまで進んでいるかを調べることができます。
「Routing Slip」 は、事前 に Slip を演算します。つまり、Slip は 1 回だけ演算されます。その場 で Slip を演算する必要がある場合は、代わりに 「Dynamic Router」 パターンを使用してください。
Java DSL の例
以下のルートは、direct:a
エンドポイントからメッセージを取得し、aRoutingSlipHeader
ヘッダーから Routing Slip を読み込みます。
from("direct:b").routingSlip("aRoutingSlipHeader");
ヘッダー名は、文字列リテラルまたは式として指定することができます。
routingSlip()
の 2 つの引数形式を使用して、URI の区切り文字をカスタマイズすることもできます。以下の例では、routing slip に aRoutingSlipHeader
ヘッダーキーを使用し、#
文字を URI 区切り文字として使用するルートを定義しています。
from("direct:c").routingSlip("aRoutingSlipHeader", "#");
XML 設定の例
以下の例は、XML で同じルートを設定する方法を示しています。
<camelContext id="buildRoutingSlip" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:c"/> <routingSlip uriDelimiter="#"> <headerName>aRoutingSlipHeader</headerName> </routingSlip> </route> </camelContext>
無効なエンドポイントの無視
「Routing Slip」 は、「受信者リスト」 パターンもサポートする ignoreInvalidEndpoints
をサポートするようになりました。これを使用して、無効なエンドポイントをスキップすることができます。以下に例を示します。
from("direct:a").routingSlip("myHeader").ignoreInvalidEndpoints();
Spring XML では、この機能は <routingSlip>
タグに ignoreInvalidEndpoints
属性を設定して有効にします。
<route> <from uri="direct:a"/> <routingSlip ignoreInvalidEndpoints="true"> <headerName>myHeader</headerName> </routingSlip> </route>
myHeader
に direct:foo,xxx:bar
の 2 つのエンドポイントが含まれるケースを考えてみましょう。最初のエンドポイントは有効であり、動作します。2 つ目は無効であるため、無視されます。無効なエンドポイントに遭遇するたびに、Apache Camel ログが INFO
レベルで記録されます。
オプション
routingSlip
DSL コマンドは、以下のオプションをサポートします。
名前 | デフォルト値 | 説明 |
|
| 式が複数のエンドポイントを返した場合に使用される区切り文字。 |
|
| エンドポイント URI を解決できなかった場合は、無視されます。false の場合は、Camel はエンドポイント URI が有効ではないことを示す例外を出力します。 |
|
| Camel 2.13.1/2.12.4: Routing Slip で再使用されるプロデューサーをキャッシュする ProducerCache のキャッシュサイズを設定できます。デフォルトのキャッシュサイズ 0 を使用します。値を -1 に設定すると、キャッシュをすべて無効にすることができます。 |