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 のメッセージを受信します。
コピーモードの XL DSL での同様な例は以下のとおり
オプション リンクのコピーリンクがクリップボードにコピーされました!
loop
DSL コマンドは、以下のオプションをサポートします。
名前 | デフォルト値 | 説明 |
|
|
Camel 2.8: コピーモードを使用するかどうか。 |
Do While ループ リンクのコピーリンクがクリップボードにコピーされました!
do while
ループを使って、条件が満たされるまでループを実行することができます。条件は true または false のいずれかになります。
DSL の場合、コマンドは LoopDoWhile
になります。以下の例では、メッセージ本文の長さが 5 文字以下になるまでループを実行します。
XML の場合、コマンドは loop doWhile
になります。以下の例では、メッセージ本文の長さが 5 文字以下になるまでループを実行します。