0

次のような動作が必要です: Camel はディレクトリからファイルを読み取り、それを (ストリーミングを使用して) チャンクに分割し、各チャンクを同時処理のために seda キューに送信し、処理が完了した後、レポート ジェネレーターが呼び出されます。これは私のラクダルートです:

from("file://c:/mydir?move=.done")
.to("bean:firstBean")
.split(ExpressionBuilder.beanExpression("splitterBean", "split"))
.streaming()
.to("seda:processIt")
.end()
.to("bean:reportGenerator");

from("seda:processIt")
.to("bean:firstProcessingBean")
.to("bean:secondProcessingBean");

これを実行すると、reportGenerator Bean が seda 処理と同時に実行されます。seda 処理全体が完了した後に一度実行するにはどうすればよいですか?

4

2 に答える 2

2

スプリッターには並列が組み込まれているため、次のように簡単に実行できます。

from("file://c:/mydir?move=.done")
  .to("bean:firstBean")
  .split(ExpressionBuilder.beanExpression("splitterBean", "split"))
  .streaming().parallelProcessing()
    .to("bean:firstProcessingBean")
    .to("bean:secondProcessingBean");
  .end()
  .to("bean:reportGenerator");

並列オプションの詳細については、Camel スプリッター ページ ( http://camel.apache.org/splitter ) で確認できます。

于 2013-03-06T18:07:22.477 に答える
1

第二ルートのCamelの遅延パターンを使えば目的を達成できると思います。

引数がミリ秒単位の時間を示す delay(long)。このパターンの詳細については、こちらをご覧ください

例えば; from("seda:processIt").delay(2000) .to("bean:firstProcessingBean");// このルートを 2 秒遅らせる

ただし、ルートの起動を構成するにはstartupOrderを使用することをお勧めします。公式ドキュメントには、トピックに関する詳細が記載されています。よろしければこちらをお読みください

注意点 - 「最低の startupOrder を持つルートが最初に開始されます。定義されたすべての startupOrder は、CamelContext 内のすべてのルートの中で一意である必要があります。」

だから、私はこのようなものを提案したいと思います -

from("endpoint1").startupOrder(1)
.to("endpoint2");


from("endpoint2").startupOrder(2)
.to("endpoint3");

それが役立つことを願っています..

PS:私はApache Camelとstackoverflowも初めてです。発生した可能性のある間違いをご容赦ください。

于 2013-03-06T15:17:25.207 に答える