Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion apachecamel中的无限循环_Recursion_Apache Camel_Stack Overflow_Infinite Loop_Integration Patterns - Fatal编程技术网

Recursion apachecamel中的无限循环

Recursion apachecamel中的无限循环,recursion,apache-camel,stack-overflow,infinite-loop,integration-patterns,Recursion,Apache Camel,Stack Overflow,Infinite Loop,Integration Patterns,我需要创建一个路由,它在迭代之间以较小的延迟周期性地调用某个进程 当我查看循环文档时: 循环允许对消息进行多次处理,每次迭代可能采用不同的方式。主要在测试期间有用 因此,这对我没有用处,因为我需要执行无限循环(没有明确指定CamelLoopSize) 我的第二个想法是使用某种“递归”: 这在几天内运行良好,但是在大约600次迭代之后,由于StackOverflowException 是否有更好的方法在无限循环中运行我的进程?使用组件: from("timer://foo?fixedRate=fa

我需要创建一个路由,它在迭代之间以较小的延迟周期性地调用某个进程

当我查看循环文档时:

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

因此,这对我没有用处,因为我需要执行无限循环(没有明确指定
CamelLoopSize

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

这在几天内运行良好,但是在大约600次迭代之后,由于
StackOverflowException

是否有更好的方法在无限循环中运行我的进程?

使用组件:

from("timer://foo?fixedRate=false&period=18000000")
     .process(someProcess);
如果
fixedRate
为false,则不会发生重叠,请参见使用组件:

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

如果
fixedRate
为false,则不会发生重叠,有关递归,请参见,您可以使用camel组件

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

对于递归,可以使用camel的组件

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

为什么不使用石英或定时器组件?因为我无法提前确定完成该过程需要多长时间。完成此过程可能需要几分钟或几天。当我只设置一个计时器时,就有可能同时处理相同的数据集。设置延迟更适合我的使用情况。轮询消费者模式如何?为什么不使用石英或计时器组件?因为我无法提前确定流程需要多长时间才能完成。完成此过程可能需要几分钟或几天。当我只设置一个计时器时,就有可能同时处理相同的数据集。设置延迟更适合我的用例。轮询消费者模式如何?我之所以选择它,是因为它是真正长时间处理的解决方案-我的意思是,我有许多数据,这些数据是使用骆驼从目的地a传输到目的地B的,直到a中出现某种东西。。这导致了stackoverflow,只是因为堆栈太长(没有递归!),我选择了Upvote,因为它是一个非常长的处理解决方案——我的意思是我有很多数据,它们是使用camel从目的地A传输到目的地B的,直到A中出现某种东西。。这导致堆栈溢出,只是因为堆栈太长(没有递归!)