1

ルートを作成する必要があります。このルートは、反復間のわずかな遅延で定期的にプロセスを呼び出します。

ループのドキュメントを見ると:

ループはメッセージを何回も処理することを可能にします。おそらく反復ごとに異なる方法で処理します。主にテスト中に役立ちます。

したがって、無限ループを実行する必要があるため(CamelLoopSize明示的に指定せずに)、これは役に立ちません。

私の2番目のアイデアは、一種の「再帰」を使用することでした:

from("direct:updateLoop").routeId("updateLoop")
  .process(someProcess)
  ...
  .filter(someFilter)  // Can be used to stop the workflow
  .delay(18000000)  // Wait 5 hours and start again
  .to("direct:updateLoop")

これは数日間はうまく機能しますが、約 600 回の反復の後、これは失敗します。StackOverflowException

プロセスを無限ループで実行するより良い方法はありますか?

4

2 に答える 2

4

Camel Timerコンポーネントを使用します。

from("timer://foo?fixedRate=false&period=18000000")
     .process(someProcess);

fixedRateが false の場合、オーバーラップは発生しません。Apache Camel タイマー: "period" と "fixedRate"を参照してください。

于 2014-10-09T09:20:43.720 に答える
2

再帰には、camel のsedaコンポーネントを使用できます。

from("seda:updateLoop").routeId("updateLoop")
    .process(someProcess)
    ...
    .filter(someFilter)  // Can be used to stop the workflow
    .delay(18000000)  // Wait 5 hours and start again
    .to("seda:updateLoop");
于 2016-04-14T08:09:48.323 に答える