8.16. Loop
Loop リンクのコピーリンクがクリップボードにコピーされました!
Loop パターンにより、メッセージを複数回処理できます。これは主にテストで使用されます。
デフォルトでは、ループ全体で同じエクスチェンジが使用されます。上記は、次の反復に使用されます (「パイプとフィルター」 を参照)。Camel 2.8 から、代わりにコピーモードを有効にすることができます。詳細は、オプションの表を参照してください。
エクスチェンジプロパティー リンクのコピーリンクがクリップボードにコピーされました!
ループ反復ごとに 2 つのエクスチェンジプロパティーが設定され、任意でループに含まれるプロセッサーで読み込むことができます。
| プロパティー | 説明 |
|---|---|
|
| Apache Camel 2.0: ループの総数 |
|
| Apache Camel 2.0: 現在のイテレーションのインデックス (0 ベース) |
Java DSL の例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、direct:x エンドポイントからリクエストを取得して、そのメッセージを mock:result に繰り返し送信する方法を示しています。ループの反復回数は、loop() への引数として指定するか、実行時に式を評価することで指定します。評価する場合は、式が int として評価される 必要があります (そうでない場合は RuntimeCamelException が出力されます)。
次の例では、ループ回数を定数として渡しています。
from("direct:a").loop(8).to("mock:result");
from("direct:a").loop(8).to("mock:result");
次の例では、ループ数を決定するために単純な式を評価しています。
from("direct:b").loop(header("loop")).to("mock:result");
from("direct:b").loop(header("loop")).to("mock:result");
次の例では、XPath 式を評価してループ数を決定します。
from("direct:c").loop().xpath("/hello/@times").to("mock:result");
from("direct:c").loop().xpath("/hello/@times").to("mock:result");
XML 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
Spring XML でも同じルートを設定することができます。
次の例では、ループ回数を定数として渡しています。
次の例では、ループ数を決定するために単純な式を評価しています。
コピーモードの使用 リンクのコピーリンクがクリップボードにコピーされました!
ここで、direct:start エンドポイントに A の文字を含むメッセージを送信したとします。このルートの処理の出力は、各 mock:loop エンドポイントがメッセージとして AB を受信することになります。
しかし、コピーモードを 有効にしない 場合、mock:loop は AB、ABB、および ABBB のメッセージを受信します。
コピーモードの XML DSL での同等の例は以下のとおりです。
オプション リンクのコピーリンクがクリップボードにコピーされました!
loop DSL コマンドは、以下のオプションをサポートします。
| 名前 | デフォルト値 | 説明 |
|
|
|
Camel 2.8: コピーモードを使用するかどうか。 |
Do While ループ リンクのコピーリンクがクリップボードにコピーされました!
do while ループを使用して、条件が満たされるまでループを実行することができます。条件は true または false のいずれかになります。
DSL の場合、コマンドは LoopDoWhile になります。以下の例では、メッセージ本文の長さが 5 文字以下になるまでループを実行します。
XML の場合、コマンドは loop doWhile になります。以下の例では、メッセージ本文の長さが 5 文字以下になるまでループを実行します。