8.7. Routing Slip

概要

図8.8「Routing Slip パターン」 に示されている Routing Slip パターンでは、一連のプロセスステップを通してメッセージを順番にルーティングできます。設計時にこのステップの順序は分かっておらず、メッセージごとに順序が変わる場合があります。メッセージが通過するエンドポイントのリストは、ヘッダーフィールド (Slip) に格納されます。Apache Camel は実行時に読み込み、パイプラインを構築します。

図8.8 Routing Slip パターン

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>

myHeaderdirect:foo,xxx:bar の 2 つのエンドポイントが含まれるケースについて考えてみましょう。最初のエンドポイントは有効であり、動作します。2 つ目は無効であるため、無視されます。無効なエンドポイントに遭遇するたびに、Apache Camel ログが INFO レベルで記録されます。

オプション

routingSlip DSL コマンドは、以下のオプションをサポートします。

名前

デフォルト値

説明

uriDelimiter

,

式が複数のエンドポイントを返した場合に使用される区切り文字。

ignoreInvalidEndpoints

false

エンドポイント URI を解決できなかった場合は、無視されます。false の場合は、Camel はエンドポイント URI が有効ではないことを示す例外を出力します。

cacheSize

0

Camel 2.13.1/2.12.4: Routing Slip で再使用されるプロデューサーをキャッシュする ProducerCache のキャッシュサイズを設定できます。デフォルトのキャッシュサイズ 0 を使用します。値を -1 に設定すると、キャッシュをすべて無効にすることができます。