1

我需要创建一个路由,它会在迭代之间周期性地调用某个进程,延迟时间很短。Apache Camel中的无限循环

当我看文档循环:

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

所以这对我没有用,因为我需要做一个无限循环(没有明确指定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

有没有更好的办法在无限循环中运行我的进程?

+1

为什么不使用石英或计时器组件? – 2014-10-09 08:33:23

+0

因为我无法预先确定完成该过程需要多长时间。该过程可能需要几分钟或几天时间才能完成。当我只设置一个定时器时,就有可能同时处理同一个数据集。设置延迟只适合我的使用情况。 – Peter 2014-10-09 08:38:35

+0

投票消费者模式如何? – vikingsteve 2014-10-09 09:10:16

回答

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"); 
+1

我有upvoted,因为它是真正长时间处理的解决方案 - 我的意思是我有很多数据,使用从目的地A到目的地B的骆驼运输,直到有一些东西..这导致了stackoverflow,只是因为堆栈太长(没有递归!) – Cipous 2016-06-10 09:49:47