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中出现某种东西。。这导致堆栈溢出,只是因为堆栈太长(没有递归!)