1

주기적으로 반복하는 과정에서 약간의 지연이있는 프로세스를 호출하는 라우트를 만들어야합니다.아파치 카멜의 무한 루프

내가 루프에 대한 설명서를 보면 :

루프 가능성이 각 반복에 대해 다른 방법으로 메시지 여러 번의 수를 처리 할 수 ​​있습니다. 주로 테스트하는 동안 유용합니다.

무한 루프 (CamelLoopSize 명시 적으로 지정하지 않음)를 수행해야하므로이 방법은 유용하지 않습니다.

내 두 번째 생각은 "재귀"의 종류를 사용했다 : 그러나 약 600 반복 후,

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

이 며칠 동안 잘 작동을,이 더 나은 방법이 있나요 StackOverflowException

실패 내 과정을 무한 루프로 돌릴 수 있습니까?

+1

석영 또는 타이머 구성 요소를 사용하지 않는 이유는 무엇입니까? –

+0

사전에 프로세스를 완료하는 데 걸리는 시간을 미리 결정할 수 없기 때문에 이 과정은 몇 분에서 며칠이 걸릴 수 있습니다. 타이머 만 설정하면 동일한 데이터 세트를 동시에 처리 할 수 ​​있습니다. 필자의 유스 케이스에는 지연 설정이 더 적합합니다. – Peter

+0

소비자 패턴을 폴링하는 것은 어떻습니까? – vikingsteve

답변

2

을 볼 수 있습니다.

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에서 뭔가가있을 때까지 대상 A에서 대상 B까지 낙타를 사용하여 운송 된 많은 데이터가 있음을 의미합니다. 스택이 너무 커서 스택 오버 플로우가 발생했습니다. 긴 (재귀없이!) – Cipous