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