我需要创建一个路由,它会在迭代之间以较小的延迟周期性地调用某个进程。
当我查看循环文档时:
循环允许多次处理消息 ,可能以不同的方式进行每次迭代。主要用于测试期间。
所以这对我没用,因为我需要做一个无限循环(没有明确指定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
有没有更好的方法在无限循环中运行我的进程?
答案 0 :(得分:4)
使用Camel Timer组件:
from("timer://foo?fixedRate=false&period=18000000")
.process(someProcess);
如果fixedRate
为false,则不会发生重叠,请参阅Apache Camel timer: "period" vs "fixedRate"
答案 1 :(得分: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");