【发布时间】:2014-12-04 02:33:05
【问题描述】:
我需要创建一个路由,它会定期调用一些进程,在迭代之间有一个小的延迟。
当我查看循环文档时:
循环允许处理消息多次,每次迭代可能采用不同的方式。主要在测试期间有用。
所以这对我没有用,因为我需要做一个无限循环(没有明确指定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 失败
有没有更好的方法让我的进程无限循环运行?
【问题讨论】:
-
为什么不使用石英或计时器组件?
-
因为我无法提前确定完成该过程需要多长时间。该过程可能需要几分钟或几天才能完成。当我只设置一个计时器时,会有可能同时处理同一个数据集。设置延迟更适合我的用例。
-
轮询消费者模式怎么样?
标签: recursion apache-camel stack-overflow infinite-loop integration-patterns