1

我需要创建一个路由,它会定期调用一些进程,在迭代之间有一个小的延迟。

当我查看循环文档时:

循环允许多次处理消息,每次迭代可能以不同的方式。主要在测试期间有用。

所以这对我没有用,因为我需要做一个无限循环(没有CamelLoopSize明确指定)。

我的第二个想法是使用一种“递归”:

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

对于递归,您可以使用骆驼的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 回答