我使用Apache Camel的文件組件遇到了一個奇怪的障礙。問題的要點是:我使用文件組件來加載目錄中的所有消息。然後我使用處理器對加載的文件執行一些操作。如果該過程成功,那麼我將該文件移至其他位置並刪除原始文件。如果這個過程失敗了,我會把信息留在原來的目錄中。代碼看起來像這樣:Apache Camel:在處理後將消息放回原始位置
from("fileLocation")
.process(new MessageProcessor())
.choice()
.when(header("processPassed").isEqualTo(true))
.to("file:newLocation")
.otherwise()
.to("fileLocation");
如果處理器通過,那麼一切都很好。但是,如果處理器發生故障,並且我試圖將消息返回到其原始位置,則不起作用。任何想法如何解決這個問題?
無限循環=非常糟糕! – vikingsteve
我同意將文件移動到錯誤文件夾,但將它們留作原始位置是必需的。 – David
然後你需要建立一個[Idempotent Consumer](http://camel.apache.org/idempotent-consumer.html)。在文件端點上指定noop = true作爲on選項將執行此操作,但只適用於1000個條目或只要應用程序未重新啓動。答案是用持久冪等解決方案的例子更新的。 –